2016-05-25 4 views
0

У меня возникли проблемы с отладкой аварии в распределенном приложении. Я не могу воспроизвести эту катастрофу лично. Однако, похоже, что у большого числа пользователей возникла проблема. Я подозреваю, что это связано с HKSampleQuery и, возможно, без каких-либо результатов. Но я не понимаю, почему результаты не вернутся, когда многие пользователи заявили, что они разрешили моему приложению доступ к данным о сердечном ритме. И тогда, даже если мы не будем никаких результатов, его нужно просто запустить метод "displayError(), но он выходит из строя ....watchOS 2 HealthKit HKSampleQuery Crash

Кодекс Запуск В Apple Наблюдать контроллер интерфейса Расширение

func loadHealthKitData(){ 
    NSLog("Loading HealthKit Data") 
    let dataTypesToRead = NSSet(object: HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeartRate)!) 
    healthKitStore.requestAuthorizationToShareTypes(nil, readTypes:dataTypesToRead as? Set<HKObjectType>) { (success, error) -> Void in} 
    let sampleType = HKSampleType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeartRate)! 
    let cal = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)! 
    let date = cal.startOfDayForDate(NSDate()) 
    let mostRecentPredicate = HKQuery.predicateForSamplesWithStartDate(date, endDate:NSDate(), options: .None) 
    let sortDescriptor = NSSortDescriptor(key:HKSampleSortIdentifierStartDate, ascending: false) 

    runHKSampleQuery(sampleType, mostRecentPredicate: mostRecentPredicate, sortDescriptor: sortDescriptor) 
} 

func runHKSampleQuery(sampleType: HKSampleType, mostRecentPredicate: NSPredicate, sortDescriptor: NSSortDescriptor){ 
    let sampleQuery = HKSampleQuery(sampleType: sampleType, predicate: mostRecentPredicate, limit: 1000, sortDescriptors: [sortDescriptor]){ 
     (sampleQuery, results, error) -> Void in 
     dispatch_async(dispatch_get_main_queue(), {() -> Void in 
      ****if(results == nil){ 
       self.displayError() 
       return 
      } 
      self.handleHKResults(results!) 
     }); 
    } 
    self.healthKitStore.executeQuery(sampleQuery) 
    NSLog("healthKitStore.executeQuery") 
} 

символизировал Atos Краш Выход в терминал

InterfaceController... (runHKSampleQuery (HKSampleType, mostRecentPredicate: NSPredicate, sortDescriptor: NSSortDescriptor) ->()) (закрытие # 1) (закрытие # 1) (в AppleWatch Extension) (InterfaceController.swift: 76)

Я добавил 4 **** в строке 76 в интерфейсном контроллере, где должен произойти сбой.

Stack Кадр из Крушения

Exception Type: EXC_BREAKPOINT (SIGTRAP) 
Exception Codes: 0x0000000000000001, 0x00000000e7ffdefe 
Triggered by Thread: 0 

Thread 0 name: 
Thread 0 Crashed: 
0 AppleWatch Extension   0x001052f0 0xd8000 + 185072 
1 libdispatch.dylib    0x2aa6045a _dispatch_call_block_and_release + 10 (init.c:760) 
2 libdispatch.dylib    0x2aa60436 _dispatch_client_callout + 6 (object.m:508) 
3 libdispatch.dylib    0x2aa600d0 _dispatch_main_queue_callback_4CF$VARIANT$up + 1480 (inline_internal.h:1063) 
4 CoreFoundation     0x2aedc15e __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 10 (CFRunLoop.c:1613) 
5 CoreFoundation     0x2aeda64a __CFRunLoopRun + 1554 (CFRunLoop.c:2718) 
6 CoreFoundation     0x2ae2c90c CFRunLoopRunSpecific + 380 (CFRunLoop.c:2814) 
7 Foundation      0x2b685346 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 258 (NSRunLoop.m:366) 
8 Foundation      0x2b6d0130 -[NSRunLoop(NSRunLoop) run] + 80 (NSRunLoop.m:388) 
9 libxpc.dylib     0x2ac71e76 _xpc_objc_main + 610 (main.m:176) 
10 libxpc.dylib     0x2ac7359a xpc_main + 170 (init.c:1427) 
11 Foundation      0x2b81fa08 -[NSXPCListener resume] + 164 (NSXPCListener.m:257) 
12 PlugInKit      0x339d3950 -[PKService run] + 520 (PKService.m:105) 
13 WatchKit      0x377593be main + 134 (main.m:54) 
14 libdyld.dylib     0x2aaab8ca start + 2 (start_glue.s:64) 

Thread 1: 
0 libsystem_kernel.dylib   0x2ab9681c __workq_kernreturn + 8 
1 libsystem_pthread.dylib   0x2ac41a42 _pthread_wqthread + 918 (pthread.c:1999) 
2 libsystem_pthread.dylib   0x2ac41698 start_wqthread + 12 (pthread_asm.s:147) 

Любая помощь на это было бы здорово. Я не понимаю, почему происходит. Приветствия

ответ

1

Глядя на точку, что вы думаете, может быть проблема:

Вы можете изменить свой код, чтобы быть

if let results = results { 
    self.handleHKResults(results) 
}else{ 
    //handle error 
} 

Как отдельный вопрос, вы, кажется, не делать что-либо с объектом error, что может помочь вам обнаружить истинную проблему.

+0

Хорошо, привет, я отдам это. Как я могу получить ошибку, полученную от людей, использующих распределенную версию приложения, которые испытывают ошибку. В настоящее время у меня есть presentAlertControllerWithTitle, отображающий текст ошибки. Есть ли способ лучше? –