我正在写一个iphone应用程序;我需要将数据保存到持久存储,但我遇到了问题...... 我在xcdatamodel中创建了一个实体,我没有遇到为我的属性设置默认值的问题。在我的测试中,我通过下面的代码几次,并且可以在应用程序处于活动状态时更改此属性(它是一个整数)。但是,当我关闭并重新打开应用程序时,我的整数(myInt)恢复到默认值,当我预期它是我更新它的最后一个值。 这就是我在做的事情:
NSManagedObjectContext *managedObjectContext = appDelegate.managedObjectContext;
NSEntityDescription *myTestEntity = [NSEntityDescription
entityForName:@"TestEntity"
inManagedObjectContext:managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:timeStampEntity];
NSError *error = nil;
NSArray *fetchedObjects = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
if (fetchedObjects == nil) {
// TODO: Handle the error
}
for (id oneObject in fetchedObjects)
{
NSInteger myInt = [[oneObject valueForKey:@"myStoredInt"]intValue];
myInt++;
[oneObject setValue:[NSNumber numberWithInt: myInt] forKey:@"myStoredInt"];
NSError *error = nil;
if (![managedObjectContext save:&error]) {//TODO: Handle error
}
}
[fetchRequest release];
我希望这一行:
if (![managedObjectContext save:&error])
会完成这项工作并将更改存储到持久存储中,但事实并非如此! (在for循环内部或外部使用此行不会更改结果) 我做错了什么?
非常感谢你的帮助!
答案 0 :(得分:3)
如果您可以显示您的应用委托代码,将会很有帮助。我的猜测是你正在重置自己的数据。也许在加载开始数据的方法中。
现在有3个笔记:
检查是否在(如果没有添加)中调用了一个save方法:
- (void)applicationWillTerminate:(UIApplication*)application {
[self saveContext];
}
- (void)applicationDidEnterBackground:(UIApplication*)application {
[self saveContext];
}
如果它无助于尝试查看您是否在该应用的每个午餐上加载默认值。
好运
欢迎
修改强>
嘿,你可以这样做 -- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
if (persistentStoreCoordinator_ != nil) {
return persistentStoreCoordinator_;
}
NSURL *storeURL = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"anyname.sqlite"]];
//check if the store already exist?
BOOL firstRun = NO;
if (![[NSFileManager defaultManager] fileExistsAtPath:[storeURL path] isDirectory:NULL]) {
firstRun = YES;
}
NSError *error = nil;
persistentStoreCoordinator_ = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![persistentStoreCoordinator_ addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
if(firstRun){
//add your default data here
}
}