【发布时间】:2011-10-22 02:16:10
【问题描述】:
我在 iPhone 应用上遇到了 Core Data 问题。每次我尝试使用 NSEntityDescription 调用方法时,我都会得到一个 objc_exception_throw() (我在符号断点中设置了它)。
我得到异常的部分示例是:
NSFetchRequest *request = [[NSFetchRequest alloc] init];
managedObjectContext = [favoritesFetchedResultsController managedObjectContext];
[request setEntity:[NSEntityDescription entityForName:@"FavoriteAddress" inManagedObjectContext:self.managedObjectContext]];
favorites = [managedObjectContext executeFetchRequest:request error:nil];
managedObjectContext = [recentsFetchedResultsController managedObjectContext];
[request setEntity:[NSEntityDescription entityForName:@"RecentAddress"
inManagedObjectContext:managedObjectContext]];
recents = [managedObjectContext executeFetchRequest:request error:nil];
[request release];
“FavoriteAddress”和“RecentAddress”是我的核心数据模型中对象的名称。 favoritesFetchedResultsController 和 recentsFetchedResultsController 都在以下方法中定义:
-(NSFetchedResultsController *)favoritesFetchedResultsController
{
NSLog(@"Favorites Fetched Results Controller called");
if(favoritesFetchedResultsController == nil)
{
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"FavoriteAddress" inManagedObjectContext:managedObjectContext];
[request setEntity:entity];
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:@"FavoritesCache"];
aFetchedResultsController.delegate = self;
self.favoritesFetchedResultsController = aFetchedResultsController;
[aFetchedResultsController release];
[request release];
}
return favoritesFetchedResultsController;
}
-(NSFetchedResultsController *)recentsFetchedResultsController
{
NSLog(@"Recent Fetched Results Controller called");
if(recentsFetchedResultsController == nil)
{
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"RecentAddress" inManagedObjectContext:managedObjectContext];
[request setEntity:entity];
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:@"RecentsCache"];
aFetchedResultsController.delegate = self;
self.recentsFetchedResultsController = aFetchedResultsController;
[aFetchedResultsController release];
[request release];
}
return recentsFetchedResultsController;
}
抛出异常时我得到的回溯是:
0 0x01703cb4 in objc_exception_throw ()
1 0x00fe6a87 in +[NSEntityDescription entityForName:inManagedObjectContext:] ()
2 0x0001ca7f in -[SavedAddressesViewController getData] (self=0x8173910, _cmd=0x22f72) at /Users/MasonSilber/Desktop/Programming Stuff/iOS Programming/XCode 4/StuffNearMe/StuffNearMe/SavedAddressesViewController.m:40
3 0x0001c93f in -[SavedAddressesViewController initWithStyle:] (self=0x8173910, _cmd=0x6bfe690, style=UITableViewStylePlain) at /Users/MasonSilber/Desktop/Programming Stuff/iOS Programming/XCode 4/StuffNearMe/StuffNearMe/SavedAddressesViewController.m:28
4 0x0039e3b6 in -[UITableViewController init] ()
5 0x00016662 in -[StartPageViewController goToSavedAddresses:] (self=0x815fde0, _cmd=0x2222a, sender=0x852a100) at /Users/MasonSilber/Desktop/Programming Stuff/iOS Programming/XCode 4/StuffNearMe/StuffNearMe/StartPageViewController.m:409
6 0x0156e969 in -[NSObject performSelector:withObject:withObject:] ()
7 0x00176429 in -[UIApplication sendAction:to:from:forEvent:] ()
8 0x003ae993 in -[UIBarButtonItem(UIInternal) _sendAction:withEvent:] ()
9 0x0156e969 in -[NSObject performSelector:withObject:withObject:] ()
10 0x00176429 in -[UIApplication sendAction:to:from:forEvent:] ()
11 0x001763be in -[UIApplication sendAction:toTarget:fromSender:forEvent:] ()
12 0x0021d45f in -[UIControl sendAction:to:forEvent:] ()
13 0x0021d928 in -[UIControl(Internal) _sendActionsForEvents:withEvent:] ()
14 0x0021cbf3 in -[UIControl touchesEnded:withEvent:] ()
15 0x0019c7b4 in -[UIWindow _sendTouchesForEvent:] ()
16 0x0019c9dd in -[UIWindow sendEvent:] ()
17 0x001820c0 in -[UIApplication sendEvent:] ()
18 0x0017590c in _UIApplicationHandleEvent ()
19 0x01d96876 in PurpleEventCallback ()
20 0x0153fff5 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ ()
21 0x014a4902 in __CFRunLoopDoSource1 ()
22 0x014a31ea in __CFRunLoopRun ()
23 0x014a2694 in CFRunLoopRunSpecific ()
24 0x014a25ab in CFRunLoopRunInMode ()
25 0x01d94fdf in GSEventRunModal ()
26 0x01d950a4 in GSEventRun ()
27 0x00173851 in UIApplicationMain ()
28 0x000023ca in main (argc=1, argv=0xbffff5ec) at /Users/MasonSilber/Desktop/Programming Stuff/iOS Programming/XCode 4/StuffNearMe/StuffNearMe/main.m:16
我认为这可能与托管对象上下文有关(我还不太了解它们或核心数据),但我不确定。任何帮助都非常感谢,我很难让它发挥作用。提前致谢。
【问题讨论】:
-
知道抛出的异常是什么会有所帮助。让执行继续,这样你就可以看到抛出了什么。
-
哦,对不起,我没有说。这只是一个普通的 SIGABRT,控制台中没有任何消息。
-
您确认
managedObjectContext是实时的吗?也将NSZombieEnabled环境变量设置为YES。 -
我已经设置了 NSZombieEnabled,它没有向控制台发送任何通知。
标签: objective-c ios exception core-data