iPad アプリケーションで Core Data を使用しようとしています。
私は次のようなモデルを持っています:
Customer.h
#import <CoreData/CoreData.h>
@interface Customer : NSManagedObject
@property (nonatomic,strong) NSString *name;
@end
顧客.m
#import "Customer.h"
@implementation Customer
@synthesize name;
@end
テーブル ビュー コントローラーには、データベース内のすべての顧客が表示されます。顧客を選択すると、詳細ビューのプッシュ セグエが開始され、顧客が設定されます。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
CustomerDetailViewController *detailViewController = (CustomerDetailViewController*) [segue destinationViewController];
detailViewController.customer = [customers objectAtIndex:self.tableView.indexPathForSelectedRow.row];
}
詳細View Controllerでは、変更された場合、保存アクションは顧客を保存する必要があります:
- (IBAction)save:(id)sender
{
AppDelegate *delegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *moc = [delegate managedObjectContext];
self.customer.name = self.nameTextField.text;
NSError *error;
if (![moc save:&error])
{
NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
}
}
名前は変更されますが、変更は保存されません: エラーは発生しません (エラーはありません、ログは表示されません)...
さらに:
BOOL customerHasChanges = [self.customer hasChanges];
BOOL mocHasChanges = [moc hasChanges];
どちらも偽です!
ただし、新しいエンティティの挿入は正常に機能します。
Customer *customer = [NSEntityDescription insertNewObjectForEntityForName:@"Customer" inManagedObjectContext:self.managedObjectContext];
[customer setValue:@"Mars Inc." forKey:@"name"];
NSError *error;
[self.managedObjectContext save:&error];