我有一个项目,我正在使用tabbar项目进行设置。
我底部有4个标签,其中一个是“编辑”,当用户点击它时会显示一个带有月份选择器的视图。当他们选择月份时 - 屏幕应加载一个用来自coredata的相应月份条目填充的tableview。
我在我的应用代表中设置了coredata - 但我很好奇我将如何在应用程序中更深入地获取信息到我的tableview中?
我已经完成了THIS TUTORIAL on coredata并且能够在执行master-detail项目时让它工作,但这是我正在进行的tabbar项目。
在我的大多数布局中,我一直在使用故事板。
当我尝试在viewDidLoad中使用此行时,我一直收到错误:
NSManagedObjectContext *context = [self managedObjectContext];
错误是:
No visible @interface for 'myEditPageViewController' declares the selector 'managedObjectContext'
我的进口商品是:
#import "myEditPageViewController.h"
#import "myAppDelegate.h"
#import "CoreData/CoreData.h"
我当前的viewDidLoad看起来像这样(我从一些在线挖掘中得到的 - 记住,我对这些东西很新):
self.context = [self context];
if (self.context == nil)
{
self.context = [(myAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
}
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]init];
NSManagedObjectContext *context = [self managedObjectContext];
有什么想法?我正在尝试将该教程应用到我的应用程序中 - 但由于它不是主要细节,因此还涉及其他视图。只是试图让它显示coredata信息!
答案 0 :(得分:1)
首先,在myEditPageViewController.h
@property(nonatomic, strong) NSManagedObjectContext *context;
现在用view:
替换viewDidLoad中的代码if (self.context == nil)
{
self.context = [(myAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
}
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]init];
NSManagedObjectContext *context = [self context]; //Not necessary
如果不起作用,请告诉我。正如我所提到的,您不需要写最后一行,因为您可以直接引用self.context
而不是将其分配给其他变量
答案 1 :(得分:1)
关于错误
“myEditPageViewController
没有可见的@interface声明选择器managedObjectContext
”
选择器是方法的另一个术语。错误消息是在myEditPageViewController
类中,没有名为managedObjectContext
的方法。
解释您复制并粘贴的代码......
self.context = [self context];
//将self.context的值(@property NSManagedObjectContext *context
设置为该属性的getter。
//这是多余的,因为self.context
等于self context]
我建议你查阅有关setter和getter的教程,它们非常有用。
if (self.context == nil)
{
self.context = [(myAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
}
//此代码很有用,它将NSManagedObjectContext设置为存储在AppDelegate中的managedObjectContext。
//到达错误本身,这条线是多余的。
NSManagedObjectContext * context = [self managedObjectContext];
这将创建一个名为context
的本地实例变量,您真的应该使用存储的@property
self.context
。