首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >核心数据和NSEntityDescription

核心数据和NSEntityDescription
EN

Stack Overflow用户
提问于 2011-08-08 11:40:43
回答 1查看 6.5K关注 0票数 0

我的iPhone应用程序上的核心数据出现问题。每次我尝试用NSEntityDescription调用方法时,我都会得到一个objc_exception_throw() (我在我的符号断点中设置了它)。

下面是一个我得到异常的部分的例子:

代码语言:javascript
复制
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”是我的核心数据模型中的对象的名称。favoritesFetchedResultsControllerrecentsFetchedResultsController都是通过以下方法定义的:

代码语言:javascript
复制
-(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;
}

当抛出异常时,我得到的回溯是:

代码语言:javascript
复制
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

我认为这可能与托管对象上下文有关(我还不太了解它们,或者核心数据),但我不确定。任何帮助真的非常感谢,我是如此迷茫,试图让它工作。提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-10 06:14:21

您正在从self.managedObjectContext设置获取请求的managedObjectContext,但是使用从每个获取的结果控制器managedObjectContext属性返回的值来执行获取请求。

这意味着您可能涉及到两个或多个不同的上下文,或者其中一个上下文的值为空。由于您从NSEntityDescription调用中获得了异常,因此self.managedObjectContext可能为空。

除非出于某种原因显式地有两个上下文,否则应该只使用一个对上下文的引用。在这种情况下,您应该始终使用self.managedObjectContext,并注意它是否被正确填充。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6977522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档