【问题标题】:Check if managedobjectcontext is empty?检查 managedobjectcontext 是否为空?
【发布时间】:2013-07-27 10:03:11
【问题描述】:

在我的应用程序中,我想这样当用户打开应用程序并且没有对象时,我希望它向表视图的第一部分添加一个对象。我在我的 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 是什么?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      - (BOOL)hasChanges
      

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

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

      - (void)reset
      

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

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

      • (NSSet *)insertedObjects

      已插入接收器但未插入的对象集 尚未保存在持久存储中。

      • (NSSet *)updatedObjects

      向接收者注册但未提交的对象集 变化。

      • (NSSet *)deletedObjects

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

      Cited sources

      【讨论】:

      • 嗯,也许托管对象上下文不正确..也许它是持久存储?基本上我想检查 tableview 是否为空(没有核心数据对象),以便在应用程序启动时添加一个对象
      猜你喜欢
      • 1970-01-01
      • 2010-12-23
      • 2013-07-18
      • 2013-07-12
      • 2015-08-09
      • 2017-06-14
      • 2017-10-07
      • 2019-09-30
      • 1970-01-01
      相关资源
      最近更新 更多