我正在尝试更新核心数据中的一些记录。我正在采取以下步骤来完成它
我遇到了两个问题
我的代码:
- (void)fetchExpenses {
// Define our table/entity to use
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Expense" inManagedObjectContext: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];
[sortDescriptor release];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"publishTimestamp == nil"];
[request setPredicate:predicate];
// Fetch the records and handle an error
NSError *error;
NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
if (!mutableFetchResults) {
// Handle the error.
// This is a serious error and should advise the user to restart the application
}
// Save our fetched data to an array
[self setExpenseArray: mutableFetchResults];
[mutableFetchResults release];
[request release];
}
- (void) save: {
[self fetchExpenses];
int i = 1;
int max = [expenseArray count];
for(i=1; i<=max; i++) {
// Get the expense selected.
Expense *expense = [expenseArray objectAtIndex: i];
// Do your updates here
[expense setTimestamp:2]
}
}发布于 2011-09-07 13:48:53
您在日志中看到的fault并不表示错误,而是表示托管对象没有完全加载到内存中,而是由故障对象表示的。这是正常的行为。当您尝试访问或更改对象属性时,整个对象将被“故障”或读取到内存中。这是一个令人困惑的旧的数据库术语,可以追溯到20世纪60年代。
您的代码不保存任何对象。在调用托管对象上下文上的save之前,内存中托管对象的更改不会持久。
您也不希望使用这样的可变副本:
NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];…因为它浪费内存,并可能导致复制托管对象。苹果文档中有一些代码启动了这一过程,但它是错误的。相反,只需使用:
NSArray *fetchResults=[managedObjectContext executeFetchRequest:request error:&error];…它将返回与获取匹配的托管对象的自动释放数组。
https://stackoverflow.com/questions/7328872
复制相似问题