上記のコードでは、(UserNumber *)を(UserInfo *)として宣言するオブジェクトにキャストしていますか?あなたがそれをやっている理由は何ですか?
あなたの質問が正しく理解されていれば、ユーザー名があらかじめ入力されたレコードを作成し、そのレコードを後で更新できるようにしたいと考えています。
あなたのエンティティはUserInfo
と呼ばれ、userName
とposition
の2つのNSStringプロパティが作成されているものとします。また、UserInfoのクラスファイルを作成し、ヘッダーを関連するView Controllerにインポートしたと仮定します。ここで
は、あなたがそれを行うだろう方法は次のとおりです。
1)まず、あなたがUITextField *userNameField
で入力したユーザー名を持っていると仮定し、の新しいレコードを作成してみましょう。
UserInfo *userInfo = (UserInfo*)[NSEntityDescription insertNewObjectForEntityForName:@"UserInfo" inManagedObjectContext:self.managedObjectContext];
[userInfo setValue:userNameField.text forKey:@"userName"];
これは、管理対象オブジェクトコンテキストにUserInfo
の新しいインスタンスを作成し、userNameField.text
上の値にuserName
の値を設定する場所彼らができるそして、後の段階でユーザーがポイントになりますあなたのアプリでそのレコードを更新してください(あなたはここで認証について考える必要があります)。 fetchRequestは、彼らがfetchRequestArray
に保存されます、あなたのuserNameField.text
のparamaterに一致(複数可)を見つけた場合は
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSPredicate *userNamePredicate = [NSPredicate predicateWithFormat:@"(userName == %@)", userNameField.text];
[fetchRequest setPredicate:userNamePredicate];
NSEntityDescription *userInfo = [NSEntityDescription entityForName:@"UserInfo" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:userInfo];
NSError *error;
NSArray *fetchRequestArray = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
[fetchRequest release];
:あなたは、あなたの指定したユーザー名と一致するレコードをフェッチします。 userName
プロパティを必須で一意にするために必要な手順を実行する場合は、そこに最大1つのオブジェクトしか存在しません。
配列にobjectAtIndex:0
をつかんによるアクセスオブジェクトを、それがposition
プロパティの変更:上記のいずれの場合も
UserInfo *userInfoToBeEdited = [fetchRequestArray objectAtIndex:0];
[userInfoToBeEdit setValue:positionTextField.text forKey:@"position"];
、変更をコミットする準備ができたら、CoreDataのsaveメソッドを呼び出すことを忘れないでください。保存が呼び出される前に、変更は基本的に永続データのスクラッチパッドである管理対象オブジェクトコンテキストにのみ保持されます。
[EDIT SAVEメソッドを追加する]あなたのコメントを1として
を、私は通常私のAppDelegate(アップルテンプレートから直接コピー/ペースト)
- (void)saveContext
{
error = nil;
NSManagedObjectContext *managedObjectContext = self.managedObjectContext;
if (managedObjectContext != nil)
{
if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error])
{
[self seriousErrorAlert];
}
}
}
そして、以下に保存する方法を持っています変更を保存する必要があるときは、View ControllerからAppDelegateへの参照を取得して消してください。
それをCoreDataに保存する方法を教えてください。 \t NSError * error; \t if(![managedObjectContext save:&error]){ \t} –
@JamesDunayはsaveメソッドを追加したばかりで、私はそれを私の答えにどのように呼び出すでしょうか。それが役に立てば幸い! – Rog