对象的NSManagedObjectContext属性为nil

时间:2013-09-08 13:15:11

标签: ios objective-c core-data

我正在尝试使用核心数据,并且已经能够存储我的班级“Event.m”的记录。一个事件有一个时间戳和一个音符。

但是当我尝试读取表视图中的所有条目以显示它们时,我看到每个时间戳和注释都是nil(调试)。奇怪的是,我得到的数组具有正确的大小(条目数),并且还创建了表行(只有可见的注释)。

这是我的一些代码:

- (void)fetchRecords {

    // Define our table/entity to use
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Event" inManagedObjectContext:self.managedObjectContext];
    // Setup the fetch request
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    [request setEntity:entity];
    // Define how we will sort the records
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"timeStamp" ascending:NO];
    NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
    [request setSortDescriptors:sortDescriptors];
    // Fetch the records and handle an error
    NSError *error;
    NSMutableArray *mutableFetchResults = [[self.managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
    if (!mutableFetchResults) {
        NSLog(@"Error fetching data.");
    }
    // Save our fetched data to an array
    [self setEventArray: mutableFetchResults];

    NSLog(@"Records found: %i", [eventArray count]);
}

这就是我保存对象的地方:

- (void) saveEntry: (NSString *) note
{
    Event *event = (Event *)[NSEntityDescription insertNewObjectForEntityForName:@"Event" inManagedObjectContext:managedObjectContext];
    [event setTimeStamp: [NSDate date]];
    [event setNote:@"test"];

    NSError *error;
    if (![managedObjectContext save:&error]) {
        NSLog(@"Could not save entry.");
    }
    NSLog(@"Entry saved.");

    [eventArray insertObject:event atIndex:0];
}

请注意,有两种不同的视图,我可以从中访问Core Data。

这就是我在这些观点中获得MOC的地方:

- (void)viewDidLoad
{
    [super viewDidLoad];
    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    managedObjectContext = appDelegate.managedObjectContext;

}

Here I was reading,它可能来自MOC本身。这就是我在SecondViewController.h中保存变量的方法

#import "Event.h"
#import <CoreData/CoreData.h>
#import "AppDelegate.h"

@interface SecondViewController : UITableViewController {
    NSManagedObjectContext *managedObjectContext;
    NSMutableArray *eventArray;
}

@property (nonatomic, strong) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, strong) NSMutableArray *eventArray;

- (void) fetchRecords;

@end

在我的.m文件中,我有:

@synthesize managedObjectContext, eventArray;

然后我致电fetchRecords

为什么我有这个问题?

1 个答案:

答案 0 :(得分:0)

我错过了一行代码,关于请求:

   NSFetchRequest *request = [[NSFetchRequest alloc] init];
   [request setEntity:entity];
   [request setReturnsObjectsAsFaults:NO];

添加最后一行后,我可以访问所有属性。