Завершение работы iOS-приложения с Uncaught NSException
Я новичок в программировании на iOS, и я работал над старым учебником. Когда я запускаю свое приложение, я получаю сообщение об ошибке. Там написано: "неперехваченное исключение типа NSException". Я очень потерян, следующее от отладчика.
2015-05-06 18:55:11.118 Gilligizer[5728:196574] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'executeFetchRequest:error: A fetch request must have an entity.'
*** First throw call stack:
(
0 CoreFoundation 0x00000001112a8c65 __exceptionPreprocess + 165
1 libobjc.A.dylib 0x000000010fffcbb7 objc_exception_throw + 45
2 CoreData 0x000000010fc55304 -[NSManagedObjectContext executeFetchRequest:error:] + 4740
3 CoreData 0x000000010fd6bace __43-[NSFetchedResultsController performFetch:]_block_invoke + 270
4 CoreData 0x000000010fd39c30 gutsOfBlockToNSPersistentStoreCoordinatorPerform + 192
5 libdispatch.dylib 0x0000000115085614 _dispatch_client_callout + 8
6 libdispatch.dylib 0x000000011506b002 _dispatch_barrier_sync_f_invoke + 365
7 CoreData 0x000000010fd29ec6 -[NSPersistentStoreCoordinator performBlockAndWait:] + 198
8 CoreData 0x000000010fd6b8dc -[NSFetchedResultsController performFetch:] + 572
9 Gilligizer 0x000000010e1e3180 -[MasterViewController fetchedResultsController] + 720
10 Gilligizer 0x000000010e1e276a -[MasterViewController numberOfSectionsInTableView:] + 58
11 UIKit 0x000000010e518b03 -[UITableViewRowData _updateNumSections] + 84
12 UIKit 0x000000010e5194f4 -[UITableViewRowData invalidateAllSections] + 69
13 UIKit 0x000000010e36477b -[UITableView _updateRowData] + 217
14 UIKit 0x000000010e37aa1f -[UITableView numberOfSections] + 27
15 UIKit 0x000000010e5810d5 -[UITableViewController viewWillAppear:] + 97
16 UIKit 0x000000010e3c0fa1 -[UIViewController _setViewAppearState:isAnimating:] + 487
17 UIKit 0x000000010e3ed921 -[UINavigationController _startTransition:fromViewController:toViewController:] + 793
18 UIKit 0x000000010e3ee448 -[UINavigationController _startDeferredTransitionIfNeeded:] + 523
19 UIKit 0x000000010e3eef0e -[UINavigationController __viewWillLayoutSubviews] + 43
20 UIKit 0x000000010e539715 -[UILayoutContainerView layoutSubviews] + 202
21 UIKit 0x000000010e30ca2b -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 536
22 QuartzCore 0x0000000111b3aec2 -[CALayer layoutSublayers] + 146
23 QuartzCore 0x0000000111b2f6d6 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 380
24 QuartzCore 0x0000000111b2f546 _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24
25 QuartzCore 0x0000000111a9b886 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 242
26 QuartzCore 0x0000000111a9ca3a _ZN2CA11Transaction6commitEv + 462
27 UIKit 0x000000010e28aa2d -[UIApplication _reportMainSceneUpdateFinished:] + 44
28 UIKit 0x000000010e28b6f1 -[UIApplication _runWithMainScene:transitionContext:completion:] + 2648
29 UIKit 0x000000010e28a0d5 -[UIApplication workspaceDidEndTransaction:] + 179
30 FrontBoardServices 0x00000001103a45e5 __31-[FBSSerialQueue performAsync:]_block_invoke_2 + 21
31 CoreFoundation 0x00000001111dc41c __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12
32 CoreFoundation 0x00000001111d2165 __CFRunLoopDoBlocks + 341
33 CoreFoundation 0x00000001111d1947 __CFRunLoopRun + 887
34 CoreFoundation 0x00000001111d1366 CFRunLoopRunSpecific + 470
35 UIKit 0x000000010e289b42 -[UIApplication _run] + 413
36 UIKit 0x000000010e28c900 UIApplicationMain + 1282
37 Gilligizer 0x000000010e1e15cf main + 111
38 libdyld.dylib 0x00000001150b9145 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb)
2 ответа
Где-то в вашем коде вы создаете NSFetchRequest
, Он должен работать с одним объектом Core Data, поэтому используйте один из следующих методов:
+[NSFetchRequest fetchRequestWithEntityName:]
(самый простой вариант)
-[NSFetchRequest initWithEntityName:]
-[NSFetchRequest setEntity:]
где вам нужно получить NSEntityDescription
откуда-то Проверьте его заголовки для ваших вариантов там.
Например, если у вас есть сущность с именем "Account" в вашей базовой модели данных, вы можете сделать следующее:
NSFetchRequest *fetch = [NSFetchRequest fetchRequestWithEntityName:@"Account"];
Имейте в виду, что в то время как название NSManagedObject
Класс, который Xcode создает для вас, будет соответствовать модели по умолчанию, это можно изменить (например, добавить префикс, сделав его XYZAccount
), поэтому убедитесь, что вы смотрите на фактическое имя сущности, а не на имя класса.
Судя по журналу сбоев, вы пропустили указание сущности в вашем запросе на выборку Core Data.