2015-02-19 17 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) 
    } 

trên là mã của tôi
hoạt động tốt trên iOS8
nhưng trên iOS7, nó bị treo. bên dưới là nhật ký sự cố
EXC_BAD_INSTRUCTION xảy ra khi sử dụng dispatch_get_global_queue trên ios 7 (nhanh chóng)

... 
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 
... 

xin vui lòng giúp đỡ, tôi thực sự googled rất nhiều và không thấy gì hữu ích. nó không thể dispatch_get_global_queue không thể làm việc trên ios7, vì vậy phải có một số sai lầm ngu ngốc tôi đã thực hiện. chỉ cần làm không phải là điều

BTW tôi đang sử dụng Mac OS X 10.10.2 xcode6.1.1

Trả lời

12

phát hiện ra lý do giây sau khi tôi đăng. có vẻ như không phải là tôi là ngu ngốc, nhưng tài liệu táo của

QOS_CLASS_USER_INTERACTIVE, QOS_CLASS_USER_INITIATED, QOS_CLASS_UTILITY, or QOS_CLASS_BACKGROUND 

không thể được sử dụng trên iOS7, mặc dù https://developer.apple.com/library/ios/documentation/Performance/Reference/GCD_libdispatch_Ref/#//apple_ref/c/func/dispatch_get_global_queue
không bận tâm để metion bất kỳ của nó thay vì sử dụng

DISPATCH_QUEUE_PRIORITY_HIGH, DISPATCH_QUEUE_PRIORITY_DEFAULT, DISPATCH_QUEUE_PRIORITY_LOW, DISPATCH_QUEUE_PRIORITY_BACKGROUND 
1

Trong quan điểm của tôi, câu hỏi chính của bạn không phải là hàng đợi toàn cầu, là phương pháp này dispatch_get_main_queue. Vui lòng kiểm tra nó trên Tài liệu API. Nó được sử dụng trong iOS 8.0+ chỉ, thay vào đó tôi chọn sử dụng - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait.

Các vấn đề liên quan