目前,我已经创建了一个Objective类( NSObject)来处理我需要的任何特殊函数,这些函数涉及到与我的CoreData模型的交互。这些与我的CoreData交互的函数位于dbInterface.h和dbInterface.m文件中。在dbInterface类中,我添加了一个符合<NSFetchedResultsControllerDelegate>。
@interface dbInterface : NSObject<NSFetchedResultsControllerDelegate>{
NSFetchedResultsController *fetchedResultsController;
NSManagedObjectContext *managedObjectContext;
}在应用程序委托中,我创建了这个类的一个实例,并将委托托管上下文与dbInterface对象托管上下文连接起来:
附议代表:
@property (nonatomic, retain) IBOutlet dbInterface *dbConnector;表2.m:
@synthesize dbConnector;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
dbConnector.managedObjectContext=self.managedObjectContext;
return YES;
}问题:我有6个视图控制器,它们必须与这个dbInterface对象交互,以便为视图控制器本身收集数据。因此,在这个设置中,dbInterface充当viewController和CoreData模型的中间人。这是执行我在中间商dbInterface类中定义的这些特定操作的正确方式吗?
如果是而不是,那么为了视图控制器的缘故,我应该如何与CoreData模型交互呢?
如果它是正确的,那么如何访问我在应用程序委托dbConnector中声明的对象?显然,我不想创建dbInterface类的6个副本。这有一个问题,即占用过多的内存,然后还必须编写6份这行的副本:
dbConnector.managedObjectContext=self.managedObjectContext;我听过“单身人士”这个词,这是不是该走的路?
发布于 2013-02-07 19:52:08
您应该能够从应用程序委托引用您的类的实例。下面是用于引用来自另一个类的应用程序委托的代码。您将不得不将您的类前缀更改为您使用的任何内容。
#import "NXAppDelegate.h"
NXAppDelegate *appDelegate = (NXAppDelegate *)[[UIApplication sharedApplication] delegate];由于您使用dbConnector作为属性,您可以通过应用程序委托引用它(下面的示例):
viewController.managedObjectContext = appDelegate.dbConnector.managedObjectContext;使用单例开发是iOS开发中的一个小问题。它有过度使用或使用的趋势,而没有真正的需要。如果您已经评估了您的条件,并且不能使用委托、协议或子类来满足您的需求,我建议使用单例。
看起来苹果已经更新了他们的文档,以帮助解释如何正确使用单身汉,如果你想阅读这个主题的话。
http://developer.apple.com/library/mac/#documentation/General/Conceptual/DevPedia-CocoaCore/Singleton.html
此外,网上有很多文章可以讨论单身人士的利弊。
http://jason.agostoni.net/2012/01/22/ios-best-practices-singletons/
https://stackoverflow.com/questions/14757883
复制相似问题