【问题标题】:Store But Don't Save NSManagedObject to CoreData?存储但不将 NSManagedObject 保存到 CoreData?
【发布时间】:2012-04-27 05:39:03
【问题描述】:

我的应用程序中有一个简短的设置过程,我创建了一个 NSManagedObject 来存储个人的姓名和其他详细信息,但是在此设置过程中,我不想保存对象,直到用户在设置结束(以防他们出于任何原因取消设置)。

那么是否可以在不实际将其保存到 CoreData 中的情况下将持有我的信息的对象保持一小段时间直到设置过程结束?

【问题讨论】:

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


    【解决方案1】:

    当您处理 CoreData 时,所有添加/修改/删除操作都发生在 NSManagedObjectContext 中 - 但更改不会持久保存到磁盘,直到您对该上下文调用“保存”。

    所以答案是肯定的 - 这是你应该已经得到的行为。如果您正在添加或修改 NSManagedObjects 的属性,这些更改将保存在上下文的内存中,但在您实际调用“保存”之前不会保存到磁盘。

    【讨论】:

    • 这就是我遇到问题的地方。我从来没有在上下文中调用保存,我什至可以不输入任何细节,在细节视图中将所有字段留空,然后返回到我的对象列表并查看已添加的对象(具有空值)。跨度>
    • 也就是说,我想我刚刚发现我做错了什么。除此之外,我需要将我的对象向下传递大约 5 个视图(这不是最有利的做法)我怎样才能轻松做到这一点?
    • 如果每个中间视图控制器都将与对象交互,那么简单地将对象传递给每个连续的视图控制器(我假设您使用的是导航控制器堆栈)是有意义的的一个属性。如果视图 2-4 与对象无关,那么您可能会考虑将第 5 个视图控制器作为您的第一个视图控制器的委托(您将在其中获取原始托管对象引用)。​​
    • 好吧,看来我要设置一个代表了。希望有一种超级简单的方法,比如在 NSUserDefaults 中短时间持有它,但我希望这会太迟钝?无论如何,谢谢。
    【解决方案2】:

    你也可以使用

    NSEntityDescription *ed = [NSEntityDescription entityForName:@"YourManagedObject" inManagedObjectContext:managedObjectContext];
    YourManagedObject *obj = [[[YourManagedObject alloc] initWithEntity:ed insertIntoManagedObjectContext:nil] autorelease];
    

    创建托管对象而不将其插入到您的上下文中。 稍后您可以致电 [managedObjectContext insertObject:obj]; 进行操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多