检查managedobjectcontext是否为空?

时间:2013-07-27 00:46:40

标签: iphone ios objective-c core-data nsmanagedobjectcontext

在我的应用程序中,我希望这样做,以便当用户打开应用程序并且没有对象时,我希望它将对象添加到表视图的第一部分。我在我的App Delegate中知道方法:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

我可以这样做:

if (XXXXXX){    
NSManagedObjectContext *context = self.managedObjectContext;
        NSManagedObject *startingTask = [NSEntityDescription insertNewObjectForEntityForName:@"Tasks" inManagedObjectContext:context];
        [startingTask setValue:@"Eat Dinner" forKey:@"taskName"];
        [startingTask setValue:[NSNumber numberWithDouble:400] forKey:@"timeInterval"];
        [startingTask setValue:@"Tasks To Complete" forKey:@"sectionString"];
}

其中XXXXX检查managedobjectcontext是否为空(或基本上没有要提取的对象)。

但是什么是XXXXX?

2 个答案:

答案 0 :(得分:1)

只需执行您通常会执行的提取来填充表格。如果它没有返回任何记录,那么商店为您的目的是空的。这是你真正想知道的问题。

可能在同一持久性存储中可能存在与您的表记录无关的记录,因此不要担心存储中针对此类问题的实体总数。 (不要以为你的模型永远不会改变;将独立实体放入商店是完全合法的。)

答案 1 :(得分:0)

如果你的意思是空的NSManagedObjectContext没有未提交的更改,那么你可以使用它:

- (BOOL)hasChanges
  

返回一个布尔值,指示接收器是否具有   未提交的更改。

或者如果您想重置它以确保没有任何更改,您可以使用它:

- (void)reset
  

所有接收者的管理对象都被“遗忘”。如果你使用它   方法,你应该确保你也放弃对any的引用   使用接收器获取的托管对象,因为它们将无效   之后。

Ooooorrrr,您可以检查所有这些是否为空(或零):

  
      
  • (NSSet *)insertedObjects
  •   
     

已插入接收器但未插入的对象集   然后保存在一个持久的商店里。

     
      
  • (NSSet *)updatedObjects
  •   
     

在接收器中注册的未提交的对象集   变化。

     
      
  • (NSSet *)deletedObjects
  •   
     

将从其持久性存储中删除的对象集   在下一次保存操作期间。

Cited sources