2015-02-19 12 views
6
let downloadGroup = dispatch_group_create() 
    var images = [UIImage]() 
    var errors = [NSError]() 
    dispatch_apply(UInt(urls.count), dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0)) { (i) in 
     dispatch_group_enter(downloadGroup) 
     SimpleCache.sharedInstance.getImage(urls[Int(i)], completion: { (image, error) ->() in 
      if let fullImage = image { 
       images.append(fullImage) 
      } else { 
       if let err = error { 
        DLog(err.description) 
        errors.append(err) 
       } 
      } 
      dispatch_group_leave(downloadGroup); 
     }) 
    } 
    dispatch_group_notify(downloadGroup, dispatch_get_main_queue()) { 
     completion(images, errors) 
    } 

über meinen Code ist
auf ios8
aber auf ios7 funktioniert gut, es stürzt ab. unter Crash-Protokoll ist
EXC_BAD_INSTRUCTION passiert, wenn auf ios 7 (swift) mit dispatch_get_global_queue

... 
Code Type:    X86-64 (Native) 
Parent Process:  launchd_sim [16908] 
Responsible:   launchd_sim [16908] 
User ID:    501 

Date/Time:    2015-02-19 11:31:34.346 +0900 
OS Version:   Mac OS X 10.10.2 (14C109) 
Report Version:  11 
Anonymous UUID:  C7FFC618-06B4-6AF8-3BCA-52E19DB5FF20 

Sleep/Wake UUID:  5D2D4733-5669-4BBF-BE45-076C93211522 

Time Awake Since Boot: 21000 seconds 
Time Since Wake:  5400 seconds 

Crashed Thread:  0 Dispatch queue: com.apple.main-thread 

Exception Type:  EXC_BAD_INSTRUCTION (SIGILL) 
Exception Codes:  0x0000000000000001, 0x0000000000000000 

Application Specific Information: 
CoreSimulator 110.4 - Device: iPhone 5s - Runtime: iOS 7.1 (11D167) - DeviceType: iPhone 5s 


Thread 0 Crashed:: Dispatch queue: com.apple.main-thread 
0 libswiftDispatch.dylib   0x0000000112cceaea _TF8Dispatch25dispatch_get_global_queueFTVSC11qos_class_tSu_CSo8NSObject + 26 
... 

bitte helfen, ich wirklich viel gegoogelt und nichts brauchbares gefunden. es ist unmöglich dispatch_get_global_queue kann nicht auf ios7 arbeiten, also muss ein dummer Fehler, den ich gemacht habe. einfach nicht, was

BTW i Mac OS X bin mit 10.10.2 xcode6.1.1

Antwort

12

der Grund Sekunden herausgefunden, nachdem ich gebucht. es scheint mir nicht dumm, aber Apples Dokument

QOS_CLASS_USER_INTERACTIVE, QOS_CLASS_USER_INITIATED, QOS_CLASS_UTILITY, or QOS_CLASS_BACKGROUND 

kann nicht auf ios7 verwendet werden, obwohl https://developer.apple.com/library/ios/documentation/Performance/Reference/GCD_libdispatch_Ref/#//apple_ref/c/func/dispatch_get_global_queue
nicht stört statt

DISPATCH_QUEUE_PRIORITY_HIGH, DISPATCH_QUEUE_PRIORITY_DEFAULT, DISPATCH_QUEUE_PRIORITY_LOW, DISPATCH_QUEUE_PRIORITY_BACKGROUND 
1

verwenden irgendetwas davon metion In Meine Ansicht, Ihre Hauptfrage ist nicht globale Warteschlange, ist diese Methode dispatch_get_main_queue. Bitte überprüfen Sie es auf API-Dokumentation. Es wird in iOS 8.0+ nur verwendet, ich verwende stattdessen - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait.