除非事先执行提取,否则NSManagedObjectContext的registeredObjects不会返回任何内容

Toa*_*tor 1 core-data objective-c ios

干杯,

我遇到核心数据的问题,我想我只是再次朝错误的方向看.

如果我调用registeredObjects它,我的managedObjectContext将返回一个空的NSSet .但是,如果我事先执行了一次获取操作,它将返回与刚刚获取的fetch相同的对象.

没有多线程正在进行中.

这是我做的:

[self setupContext]; // This will set up managedObjectContext, which is a property of this class

// Fetching...    

NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *foo = [NSEntityDescription entityForName:@"Foo" inManagedObjectContext:managedObjectContext];
[request setEntity:foo];

NSError *fetchError = nil;
NSArray *fetchResults = [managedObjectContext executeFetchRequest:request error:&ftchError];

NSLog(@"Fetch returned %i objects.", [fetchResults count]);

[request release];

// Done fetching...

NSArray *allObjects = [[managedObjectContext registeredObjects] allObjects];

NSLog(@"Context contains %i objects...", [allObjects count]);
Run Code Online (Sandbox Code Playgroud)

商店包含30个对象.如果我运行上面的代码,两个NSLog将报告五个对象.如果我删除两个注释之间的获取部分,它将报告整个上下文的零对象.

请注意,我决不会提交或以其他方式更改上下文内容.

我是否需要先强制上下文自我刷新?我以前从来没有这样做过,我不记得registeredObjects在其他场合首先就是这样.

任何建议赞赏!Toastor

Rob*_*ier 7

你可能会对什么registeredObjects意思感到困惑.这是当前所在的对象集NSManagedObjectContext.这不是商店中的对象集,只是上下文中的对象集.如果您尚未在上下文中提取或以其他方式注册对象,则它们将不会进入registeredObjects.