0

インターネットで質問の答えを見つけようとしましたが、見つかりませんでした。コアデータに、Value属性(整数)とDate属性を持つ単純なエンティティがあります。.mファイルで2つのメソッドを定義したいと思います。

最初の方法はADD方法です。整数値(ユーザーがUIに入力)と日付(デフォルトでは現在の日付)の2つの引数を取ります。次に、引数に基づいてエンティティにレコードを挿入します。

2番目の方法は増分方法のようなものです。日付をキーとして使用してレコードを検索し、そのレコードの整数値をインクリメントします。

これらのメソッドの書き方がわかりません。(xibファイルのテーブルにアレイコントローラーがあると仮定します)

4

1 に答える 1

7

探している2番目の方法は、エンティティ自体に追加するのは適切ではありません。エンティティの上のどこかにある必要があります。ほとんどの場合、コントローラオブジェクトにあります。

最初の方法は次のとおりです。

- (void)updateDate:(NSDate*)date andValue:(NSInteger)value
{
  [self setValue:date forKey:@"date"];
  [self setValue:[NSNumber numberWithInteger:value] forKey:@"value"];
}

これはかなりストレートなKVC(Key-Value Coding)であり、このテーマに関するAppleのドキュメントを読むことを強くお勧めします。

コントローラ内にある必要がある他のメソッドの場合、レコードを見つけるためにフェッチを実行する必要があります。

- (id)findRecordForDate:(NSDate*)date inManagedObjectContext:(NSManagedObjectContext*)moc
{
  NSFetchRequest *request = [[NSFetchRequest alloc] init];
  [request setEntity:[NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:moc]];
  [request setPredicate:[NSPredicate predicateWithFormat:@"date == %@", date]];

  NSError *error = nil;
  NSArray *objects = [moc executeFetchRequest:request error:&error];
  NSAssert1(error == nil, @"Error fetching object: %@", [error localizedDescription]);

  return [objects lastObject];
}

- (void)incrementEntityWithDate:(NSDate*)date
{
  id entity = [self findRecordForDate:date inManagedObjectContext:[self managedObjectContext]];
  NSInteger value = [[entity valueForKey:@"value"] integerValue];
  value += 1;
  [entity setValue:[NSNumber numberWithInteger:value] forKey:@"value"];
}

これも非常に簡単なコアデータアクセスです。CoreDataがどのように機能するかを読むことをお勧めします。

余談ですが、日付を一意として使用することは非常に悪い設計です。

アップデート

マーカス、答えてくれてありがとう。本当に助かります。私はコアデータに慣れていないので、物事を明確にするためにいくつか質問があります。

最初のメソッドのコードは2つの値を設定しますが、新しいレコードをテーブルに挿入しません。新しく作成されたレコードをテーブルに挿入するにはどうすればよいですか?

CoreDataがどのように機能するかを読む必要があります。Appleには、Core Dataがどのように機能するかについての優れたドキュメントがあり、それが失敗した場合は、私の本を購入できます。インターネット上でCoreDataを使用する方法についての情報はたくさんあります。

最初の方法はどこに置くべきですか?私の.mファイルに?

これは基本的なObjective-Cです。この質問をしている場合は、一歩下がって、最初に言語の基礎を学ぶ必要があります。

コントローラに2番目のメソッドを追加する必要があるとおっしゃいました。ただし、コントローラーはxibファイルで定義されています。2番目の方法をそれに追加するにはどうすればよいですか?

コントローラがxibファイルで定義されることはありません。xibファイルで参照されます。繰り返しになりますが、これを深く掘り下げる前に、Objective-Cの仕組みの最初に戻って、基本を学ぶ必要があります。

于 2010-04-09T15:32:32.333 に答える