我是制作核心数据iPhone应用程序的新手。我在Xcode中创建了一个新的核心数据项目,并尝试添加一个标签栏控制器作为根视图控制器,然后将默认的tableview控制器放在此层次结构中的导航控制器之后:
- >标签栏控制器 - >导航控制器 - > TableView控制器 - > TableView Controller2 - >详细说明控制器
我之前使用导航和标签栏控制器实现了一个应用程序,但是对于这个应用程序,我需要在整个应用程序中访问managedObjectModel。
我已经尝试过使用appfate,例如didFinishLaunchingWithOptions等。 我总是得到类似'
的消息'由于未捕获的异常而终止应用 'NSInvalidArgumentException',
原因:' - [UITabBarController topViewController]:无法识别的选择器发送到实例'
这是我用来访问ManagedObjectContext的代码:
AppDelegate *appDelegate =
[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [appDelegate managedObjectContext];
NSManagedObject *newCoffee;
newCoffee = [NSEntityDescription
insertNewObjectForEntityForName:@"Coffee"
inManagedObjectContext:context];
我收到了这个错误:
'AppDelegate'没有可见的@interface声明选择器'managedObjectContext'
我刚注意到Xcode说它是一个ARC问题,如何在启用ARC的情况下访问mod?
答案 0 :(得分:3)
如果我理解您的问题是正确的,那么您希望能够访问NSManagedObjectModel,这样您就可以访问存储的数据了。我是对的吗?
首先,您应该在viewController中导入Appdelegate,您需要在其中保存或加载数据。
其次,您应该在viewDidLoad中实现它:
self.context = [self context];
if (self.context == nil)
{
self.context = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
}
在头文件中使用@property(非原子,保留)NSManagedObjectContext *上下文。
答案 1 :(得分:0)
我建议您将托管对象上下文从控制器传递给控制器。此外,如果您正在使用托管对象初始化某个视图控制器,则可以通过该对象的managedObjectContext
属性访问MOC。
答案 2 :(得分:0)
当说管理对象模型时,你的意思是管理对象上下文 - 对吗?
在这两种情况下:您可以通过共享应用程序对象的委托随时访问上下文和模型,如下所示:
[(YourAppDelegateClass *)[UIApplication sharedApplication] managedObjectContext]
但您也可以为每个视图控制器创建一个属性,并将该上下文传递给层次结构。