1

Core Data+sqliteをデータキャッシュとして使用しています。アプリはファイルをコアデータに読み込み、コアデータを使用してアプリを実行します。保存は、NSManagedObjectContextとファイルの両方に対して行われます。ただし、Core Dataデータベースにデータを再入力せずにアプリを終了してリロードすると、-save:を使用して保存されたデータの一部(すべてではない)がデータストアに保存されないことに気付きました。

管理対象オブジェクトへの変更はすべてメインスレッドで1つのバッチで行われ、すべての変更が完了した後に-save:メッセージが送信されます。保存されていないデータは、変換可能な属性であり、コアデータオブジェクト内の唯一の変換可能な属性です。オブジェクトを保存するコードは次のとおりです。

    NSInteger columnIndex = [headers indexOfObject:questionID];
    if (NSNotFound != columnIndex) {

                    // parsedLine is a mutable array already
        NSMutableArray *parsedLine = person.dataFromFile.parsedLine;
        [parsedLine replaceObjectAtIndex:columnIndex withObject:answer];
        person.dataFromFile.parsedLine = parsedLine;

        person.questionsAnsweredByPerson = [NSNumber numberWithInt:[FileParser questionsAnsweredInRow:person.dataFromFile.parsedLine withRowHeaders:headers]];

        person.address.street.questionsAnsweredByPeopleOnStreet = [NSNumber numberWithInt:[self questionsAnsweredByPeopleOnStreet]];

        //NSLog(@"rawLineBefore:\n%@", person.dataFromFile.rawLine);
        person.dataFromFile.rawLine = [ReconstructCSV composeCSVLineFromArray:person.dataFromFile.parsedLine];
        //NSLog(@"rawLineAfter:\n%@", person.dataFromFile.rawLine);


        Voter_SurveyAppDelegate *appDelegate = (Voter_SurveyAppDelegate *)[[UIApplication sharedApplication] delegate];

        NSError *error;

        NSManagedObjectContext *managedObjectContext = [appDelegate managedObjectContext];
        if (![managedObjectContext save:&error]) {
            // XXX inform the user there was a fatal error opening the file. Low disk space?
            NSLog(@"Unresolved error - could not save managedObjectContext - %@, %@", error, [error userInfo]);
            abort();
        }
        return YES;
    }

アボート(); 呼び出されないので、-saveと仮定します。正しく呼び出されています。

関連しているとは思えませんが、このコードをメインスレッドで実行した後、別のスレッドで新しいNSManagedObjectContextを使用してNSFetchRequestを実行します。他のスレッドのコアデータに関連する他のことは何も起こりません。

変換可能な属性が保存されないのはなぜですか?

4

1 に答える 1

1

問題は、変換可能なプロパティが可変オブジェクトを好まないことです。この質問への回答で述べたように、NSMutableDictionaryは保存されていませんでした。私の場合、それはNSMutableArrayでした。

于 2010-10-25T18:47:31.523 に答える