0

データをコアデータに保存し、次のコードでフェッチするために、iOSアプリケーションを作成しました。

   NSManagedObjectContext *context = [self managedObjectContext];
NSError *error;

NSManagedObject *failedBankInfo = [NSEntityDescription
                                   insertNewObjectForEntityForName:@"UserData"
                                   inManagedObjectContext:context];
[failedBankInfo setValue:[NSNumber numberWithInt:1] forKey:@"userId"];

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
                               entityForName:@"UserData" inManagedObjectContext:context];
[fetchRequest setEntity:entity];
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
for (NSManagedObject *info in fetchedObjects) {
     NSLog(@"Name: %@", [info valueForKey:@"userId"]);

}

ここは問題ありません。しかし、アプリケーションを閉じて設定値を2に変更した後、最後のデータである2のみを受け取ります。以前のデータ(1)は削除されます。

アプリケーションを閉じた後もデータエントリを保持するにはどうすればよいですか。

ありがとう!

4

2 に答える 2

2

UIManagedDocumentコアデータ情報を保存するためにを作成する必要があります。私は通常UIManagedDocument、クラスのプロパティとしてを作成します。UIManagedDocument例として、私は呼ばれるものを作成しましたtheManagedDocument

NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
url = [url URLByAppendingPathComponent:@"DocumentName"];

self.theManagedDocument = [[UIManagedDocument alloc] initWithFileURL:url];

if([[NSFileManager defaultManager] fileExistsAtPath:[url path]])
{
    [theManagedDocument openWithCompletionHandler:^(BOOL success){
        if(success) [self documentIsReady];
        if(!success) NSLog(@"Couldn't Open Document");
    }];
}
else 
{
    [theManagedDocument saveToURL:url forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success){
        if(success) [self documentIsReady];
        if(!success) NSLog(@"Couldn't Create Document");
    }];
}

次に、ドキュメントが正常に作成または開かれたときに呼び出されるというメソッドを作成しますdocumentIsReady(ドキュメントが既に存在する場合は開かれ、そうでない場合は作成されます)。また、コンテキストをプロパティとして保持します。ここではと呼ばれcontextます。私もあなたのコードに追加しました:

- (void) documentIsReady
{
    if(self.theManagedDocument.documentState == UIDocumentStateNormal) 
    {
        self.context = self.theManagedDocument.managedObjectContext;
        NSError *error;

        NSManagedObject *failedBankInfo = [NSEntityDescription
                               insertNewObjectForEntityForName:@"UserData"
                               inManagedObjectContext:self.context];
        [failedBankInfo setValue:[NSNumber numberWithInt:1] forKey:@"userId"];

        NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
        NSEntityDescription *entity = [NSEntityDescription
                           entityForName:@"UserData" inManagedObjectContext:self.context];
        [fetchRequest setEntity:entity];
        NSArray *fetchedObjects = [self.context executeFetchRequest:fetchRequest error:&error];
        for (NSManagedObject *info in fetchedObjects) {
            NSLog(@"Name: %@", [info valueForKey:@"userId"]);
        }
    }
}

次に、以下を使用し終わったら、ドキュメントを閉じます。

[self.theManagedDocument closeWithCompletionHandler:^(BOOL success){
    if(success) NSLog(@"Closed Successfully");
    if(!success) NSLog(@"Error Closing Document");
}];
于 2012-07-11T21:53:36.750 に答える
1

新しいレコードを保存しませんでした。

[self.managedObjectContext save:nil]; 
于 2012-07-12T07:37:53.777 に答える