Я разрабатываю приложение, которое использует CoreData. В представлении содержится UITableView (содержащий около 50 элементов), который использует NSFetchedResultsController. Существует также «Pull to refresh», который позволяет обновлять сохраненные данные после WS-вызова (в другом потоке с новым контекстом управляемого объекта).NSFetchedResults Проблема с контроллером на iOS4
Все работает отлично на iOS5: база данных и табличное представление обновляются, когда я выполняю «Pull to refresh». Однако есть проблема с iOS4. Первый «performFetch» работает при запуске приложения (TableView содержит все записи базы данных), но я получаю следующее сообщение об ошибке, когда я выполнить «Pull обновить»:
2012-02-29 11:56:09.119 Nanopost[1996:207] *** Terminating app due to uncaught exception 'NSObjectInaccessibleException', reason: 'CoreData could not fulfill a fault for '0x5c3c760 <x-coredata://E176B0A1-275B-4332-9231-49FD88238C2B/Ads/p231>''
*** Call stack at first throw:
(
0 CoreFoundation 0x02bfe919 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x02e595de objc_exception_throw + 47
2 CoreData 0x028b833f _PFFaultHandlerLookupRow + 1407
3 CoreData 0x028b5ee3 _PF_FulfillDeferredFault + 499
4 CoreData 0x028b9f3f _sharedIMPL_pvfk_core + 95
5 CoreData 0x0292a010 _PF_Handler_Public_GetProperty + 160
6 Foundation 0x02442c4f -[NSSortDescriptor compareObject:toObject:] + 128
7 CoreData 0x0297db5e +[NSFetchedResultsController(PrivateMethods) _insertIndexForObject:inArray:lowIdx:highIdx:sortDescriptors:] + 286
8 CoreData 0x0297e1b2 -[NSFetchedResultsController(PrivateMethods) _postprocessInsertedObjects:] + 402
9 CoreData 0x029841bc -[NSFetchedResultsController(PrivateMethods) _managedObjectContextDidChange:] + 1804
10 Foundation 0x02380c1d _nsnote_callback + 145
11 CoreFoundation 0x02bd6cf9 __CFXNotificationPost_old + 745
12 CoreFoundation 0x02b5611a _CFXNotificationPostNotification + 186
13 Foundation 0x023767c2 -[NSNotificationCenter postNotificationName:object:userInfo:] + 134
14 CoreData 0x028c0519 -[NSManagedObjectContext(_NSInternalNotificationHandling) _postObjectsDidChangeNotificationWithUserInfo:] + 89
15 CoreData 0x028f802b -[NSManagedObjectContext mergeChangesFromContextDidSaveNotification:] + 1579
16 Foundation 0x02395e9a __NSThreadPerformPerform + 251
17 CoreFoundation 0x02bdfd7f __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15
18 CoreFoundation 0x02b3e2cb __CFRunLoopDoSources0 + 571
19 CoreFoundation 0x02b3d7c6 __CFRunLoopRun + 470
20 CoreFoundation 0x02b3d280 CFRunLoopRunSpecific + 208
21 CoreFoundation 0x02b3d1a1 CFRunLoopRunInMode + 97
22 GraphicsServices 0x031e62c8 GSEventRunModal + 217
23 GraphicsServices 0x031e638d GSEventRun + 115
24 UIKit 0x0063cb58 UIApplicationMain + 1160
25 Nanopost 0x0000230a main + 170
26 Nanopost 0x00002255 start + 53
)
terminate called after throwing an instance of '_NSCoreDataException'
Когда я инициализировать «NSFetchRequest »Я поставил "FetchBatchSize" до 20 (в случайном порядке):
[l_FetchRequest setFetchBatchSize:20];
Но если установить "FetchBatchSize" 25:
[l_FetchRequest setFetchBatchSize:25];
... Нет больше аварий на iOS4 и я не «т знаю почему, и я хочу понять эту проблему :) Я не думаю, что эта строка является реальной проблемой. Может, это где-то еще проблема?
Большое спасибо за ваши ответы!
Томас
Привет Дэмиен и спасибо за Ваш ответ! Я использую другой контекст, потому что он кажется «лучшей практикой» в соответствии с документацией Apple (Другой поток = другой контекст управляемого объекта). Я попытался добавить «точку останова исключения». К сожалению, исключение бросается в файл main.m, поэтому нелегко понять эту проблему. Thomas –
Исключение в main.m означает, что он не обрабатывался и не разматывал весь стек. Ваша контрольная точка исключения будет повышаться, как только она будет выбрана - повторите попытку до тех пор, пока она не будет работать, это ключ, чтобы точно увидеть, где находится программа, когда она ломается. –