NSFetchedResultsController проблема на iOS4 - PullRequest
1 голос
/ 29 февраля 2012

Я разрабатываю приложение, которое использует CoreData.Представление содержит UITableView (содержащий около 50 элементов), который использует NSFetchedResultsController.Существует также функция «Извлечь для обновления», которая позволяет обновлять сохраненные данные после вызова WS (в другом потоке с новым контекстом управляемого объекта).

В iOS5 все отлично работает: база данных и представление таблицыобновляются, когда я выполняю «Потяните, чтобы обновить».Однако есть проблема с iOS4.Первый «executeFetch» ​​работает при запуске приложения (представление таблицы содержит все записи базы данных), но у меня возникает следующая ошибка при выполнении операции «Извлечь для обновления»:

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, и я не знаю почему, и я хочу понять эту проблему :) Я не думаю, что эта строка - настоящая проблема.Может быть, это указывает на другую проблему где-то?

Большое спасибо заранее за ваши ответы!

Томас

1 Ответ

0 голосов
/ 29 февраля 2012

Есть ли причина, по которой вы используете другой контекст? Я не переключаю свою, и у меня есть довольно похожее приложение.

Одна вещь, с которой вы можете сравнить это очень удобный CoreDataTableViewController:

http://www.stanford.edu/class/cs193p/cgi-bin/drupal/node/289

Я использую его, и у меня не было никаких проблем (хотя я не работаю в iOS 4). Вы можете сравнить, как вы подключили fetchedResultsController.

Еще один момент - у вас есть универсальная точка останова, чтобы нажать отладчик, как только возникнет исключение? Если нет, добавьте его (точки останова, + добавить, «Добавить точку останова исключения» и оставьте значения по умолчанию). Это поместит вас в отладчик прямо в строке, которая вызывает исключение, что должно быть полезно.

Удачи,

Дэмиен

...