gpt4 book ai didi

iphone - 为 CoreData 创建接口(interface)

转载 作者:行者123 更新时间:2023-11-29 04:08:45 25 4
gpt4 key购买 nike

目前,我已经创建了一个 Objective-C 类 ( NSObject) 来处理我需要的任何特殊函数,这些函数涉及与我的 CoreData 模型的交互。这些与我的 CoreData 交互的函数位于 dbInterface.h 和 dbInterface.m 文件中。在 dbInterface 类中,我添加了一个符合 <NSFetchedResultsControllerDelegate> .

@interface dbInterface : NSObject<NSFetchedResultsControllerDelegate>{
NSFetchedResultsController *fetchedResultsController;
NSManagedObjectContext *managedObjectContext;
}

在应用程序委托(delegate)中,我创建了此类的一个实例,并将委托(delegate)托管上下文与 dbInterface 对象托管上下文连接起来:

appDelegate.h:

@property (nonatomic, retain) IBOutlet dbInterface *dbConnector;

appDelegate.m:

@synthesize dbConnector;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
dbConnector.managedObjectContext=self.managedObjectContext;
return YES;
}

问题:我有 6 个 View Controller ,它们必须与这个 dbInterface 对象交互,以收集 View Controller 本身的数据。因此,在此设置中,dbInterface 充当 viewController 和 CoreData 模型的中间人。这是执行我在中间人 dbInterface 类中定义的这些特定操作的正确方法吗?

如果这不是正确的方式,那么为了 View Controller ,我应该如何与 CoreData 模型进行交互?

如果它是正确的,那么我如何访问我在应用程序委托(delegate)中声明的对象 dbConnector ?显然我不想创建 6 个 dbInterface 类的副本。这会带来使用过多内存的问题,并且还必须写入该行的 6 个副本:

dbConnector.managedObjectContext=self.managedObjectContext;

我听说过“单例”这个词,这是正确的方法吗?

最佳答案

您应该能够从应用程序委托(delegate)引用您的类的实例。这是我用来从另一个类引用我的应用程序委托(delegate)的代码。您必须将类前缀更改为您使用的任何前缀。

#import "NXAppDelegate.h"
NXAppDelegate *appDelegate = (NXAppDelegate *)[[UIApplication sharedApplication] delegate];

由于您使用 dbConnector 作为属性,因此您可以从应用程序委托(delegate)中引用它(示例如下):

viewController.managedObjectContext = appDelegate.dbConnector.managedObjectContext;

在 iOS 开发中使用单例有点令人不悦。它有被过度使用或在没有真正需要的情况下使用的倾向。如果您已经评估了您的条件并且无法使用委托(delegate)、协议(protocol)或子类来满足您的需求,我建议使用单例。

如果您想阅读该主题,Apple 似乎已经更新了他们的文档,以帮助解释单例的正确使用。

http://developer.apple.com/library/mac/#documentation/General/Conceptual/DevPedia-CocoaCore/Singleton.html

此外,网上有很多文章讨论单例的优点/缺点。

http://jason.agostoni.net/2012/01/22/ios-best-practices-singletons/

关于iphone - 为 CoreData 创建接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14757883/

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