2

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];
4

1 に答える 1

4

実装ファイルにエラーがあります。@dynamicの代わりに使用し@synthesizeます。

于 2013-10-21T10:50:37.620 に答える