2013-11-25 46 views
0

我用下面的方法插入对象插入到核心数据将数据添加到核心数据,但得到无回

-(void)createRecordWithTitle:(NSString *)title finishDate:(NSDate *)finishDate limitCount:(int)limitCount { 
    [self fetchRecordsIfNecessary] ; 
    Record *record = [NSEntityDescription insertNewObjectForEntityForName:@"Record" inManagedObjectContext:self.context] ; 
    record.createdDate = [NSDate date] ; 
    record.title = title ; 
    record.finishDate = finishDate; 
    record.limitCount = limitCount ; 
    [self.allRecords addObject:record] ; 
    [self fetchRecordsIfNecessary] ; 
    for (Record *r in self.allRecords) { 
     NSLog(@"-->title:%@",r.title) ; 
    } 
} 

并采用跟踪方法来获取数据从核心数据回。

-(void) fetchRecordsIfNecessary { 
    if (!self.allRecords) { 
     NSFetchRequest *request = [[NSFetchRequest alloc] init] ; 
     NSEntityDescription *entity = [NSEntityDescription entityForName:@"Record" inManagedObjectContext:self.context] ; 
     [request setEntity:entity] ; 
     NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"createdDate" ascending:NO] ; 
     [request setSortDescriptors:@[sortDescriptor] ] ; 

     NSError *error ; 
     NSArray *result = [self.context executeFetchRequest:request error:&error] ; 
     // if errors encountered , result is nil , otherwise , it's an valid array 
     //context will tack result's changes , and will be saved after you call context's save method 
     if (!result) { 
      [NSException raise:@"Fetch failed" format:@"%@" , [error localizedDescription]] ; 
     } 
     self.allRecords = [[NSMutableArray alloc] initWithArray:result] ; 
    } 
} 

我正确设置NSManagedContext,成功添加数据,但是获取所有零数据。谁能帮我?提前致谢。

+0

你怎么知道你是成功添加数据?你是否已经在调试器中逐步了解了实际情况? – Abizern

+0

我发现上下文的插入对象为0后,我添加一个对象到上下文中,但是当我重新查询上下文,仍然有 上下文中的数据,但是零。我不知道为什么。 – Weizhi

回答

0

您不保存上下文!

[self.context save:&error];

你需要做以下:

-(void)createRecordWithTitle:(NSString *)title finishDate:(NSDate *)finishDate limitCount:(int)limitCount { 
    [self fetchRecordsIfNecessary] ; 
    Record *record = [NSEntityDescription insertNewObjectForEntityForName:@"Record" inManagedObjectContext:self.context] ; 
    record.createdDate = [NSDate date] ; 
    record.title = title ; 
    record.finishDate = finishDate; 
    record.limitCount = limitCount ; 
    [self.allRecords addObject:record] ; 
    NSError *error; 
    if (![self.context save:&error]) { 
     NSLog(@"Failed to save - error: %@", [error localizedDescription]); 
    } 
    [self fetchRecordsIfNecessary]; 
} 
+0

我没有将上下文保存在createRecordWithTitle中,但我在此方法之后保存了 上下文。 – Weizhi

+0

我确实尝试在这种方法中保存上下文,但无法工作 – Weizhi

+0

然后,您在保存数据之前调用'[self fetchRecordsIfNecessary];'因为您将方法保存在方法之后。 – null

0

我通过调用NSFetchRequest的setReturnsObjectsAsFaults解决了这个错误:没有一种方法

相关问题