gpt4 book ai didi

ios - 如何在每个 View Controller 中正确管理 NSManagedObjectContext?

转载 作者:可可西里 更新时间:2023-11-01 03:18:46 24 4
gpt4 key购买 nike

我是 CoreData 的新手,我想知道我做的事情是否正确。首先文档说:

“按照惯例,您从 View Controller 获取上下文。不过,您必须适本地实现您的应用程序才能遵循此模式。

当您实现与 Core Data 集成的 View Controller 时,您可以添加 NSManagedObjectContext 属性。

当您创建一个 View Controller 时,您将它传递给它应该使用的上下文。您传递现有的上下文,或者(在您希望新 Controller 管理一组离散的编辑的情况下)您为其创建的新上下文。创建一个上下文以传递给显示的第一个 View Controller 通常是应用程序委托(delegate)的责任。”
https://developer.apple.com/library/ios/documentation/DataManagement/Conceptual/CoreDataSnippets/Articles/stack.html

所以我要做的是为我的 NSManagedObjectContext 创建一个属性:

MyViewController.H
@interface MyViewController : ViewController
{
NSManagedObjectContext *moc;
}

@property (nonatomic, retain) NSManagedObjectContext *moc;

@end

MyViewController.m
@implementation MyViewController
@synthesize moc=moc;

1.-任何我想对数据库做一些更改的地方我都会这样做。

MainNexarAppDelegate *appDelegate =
[[UIApplication sharedApplication] delegate];

self.moc = [[NSManagedObjectContext alloc] init];
self.moc.persistentStoreCoordinator = [appDelegate persistentStoreCoordinator];
/*code**/
[self.moc save:&error];

2-.如果我要在不同的线程中工作,我有自己的自定义方法来创建 NSManagedObjectContext 和 NSPrivateQueueConcurrencyType,这样它就可以在私有(private)队列中进行管理:

   //Myclass NSObject<br>

-(NSManagedObjectContext *)createManagedObjectContext{

MainNexarAppDelegate *appDelegate =
[[UIApplication sharedApplication] delegate];

NSPersistentStoreCoordinator *coordinator = [appDelegate persistentStoreCoordinator];
if (coordinator != nil) {
__managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];

[__managedObjectContext setPersistentStoreCoordinator:coordinator];
}
return __managedObjectContext;
}
//__managedObjectContext is my property from the .h file
//@property (readonly,strong,nonatomic) NSManagedObjectContext* managedObjectContext;
  1. 为每个 View Controller 创建一个 NSManagedObjectContext 是否是一个好的做法,您将在其中对数据库进行一些更改?
    1.1.这是使用 [UIApplication sharedApplication] 从 appdelegate 获取持久性 NSPersistentStoreCoordinator 的有效方法吗?
  2. 在主线程和任何其他线程之间共享持久存储协调器是安全的吗?

任何帮助将不胜感激:)。

最佳答案

我不同意这里的大部分答案。这对#1 来说还不错。事实上,在大多数情况下这样做可能是一种很好的做法。特别是如果你有不同的线程运行东西。它大大简化了我的应用程序,可以在需要时创建 NSManagedObjectContexts,包括每个 View Controller 。这也是 MagicalRecord 背后的人推荐的(在大多数情况下我用它来使用 Core Data)。 NSManagedObjectContext 创建对于 MR 人员来说并不是一个高开销的调用。无论如何,我都不是 CoreData 专家,但按照 MagicalRecord 人员向我推荐的方式,我取得了更好的结果。

关于ios - 如何在每个 View Controller 中正确管理 NSManagedObjectContext?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19123074/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com