0

私はまだNSMangedObjectsを初めて使用し、特定のインデックスでオブジェクトを置き換えるのに問題があります。

 for (NSString *file in filelist){

    NSManagedObject *fileEntity = [NSEntityDescription insertNewObjectForEntityForName:@"File" inManagedObjectContext:[self managedObjectContext]];
    [fileEntity setValue:file forKey:@"filename"];

    NSImage *audioImage = [NSImage imageNamed:@"tag_white.png"];
    [fileEntity setValue:audioImage forKey:@"taggedImage"];
    [markedAudioFiles addObject:audioImage];

}

ご覧のとおり、管理対象オブジェクトに簡単に挿入できます。テーブル上のファイルとすべてを表示します。ただし、キーの特定のインデックスでいくつかの値を変更したいと思い@"taggedImage"ます。

だから私はこのようなことを試みました:

NSEntityDescription *fileEntity = [NSEntityDescription entityForName:@"File" inManagedObjectContext:[self managedObjectContext]];
NSImage *audioImage = [NSImage imageNamed:@"tag_green.png"];

[fileEntity replaceValueAtIndex:index inPropertyWithKey:@"taggedImage" withValue:audioImage];

私が得るエラーは次のとおりです。

[valueForUndefinedKey:]:このクラスは、キーtagedImageのキー値コーディングに準拠していません。

fileEntity上記の宣言を次のように置き換えてみました

NSManagedObject *fileEntity = [NSEntityDescription insertNewObjectForEntityForName:@"File" inManagedObjectContext:[self managedObjectContext]];

しかし、それは新しいオブジェクトではないので、私はそれが間違っていると思いました。

4

1 に答える 1

3

コードの2番目のブロックはfileEntity、オブジェクトの単なる説明であり、実際のNSManagedObjectものではないため、キーはありませんtaggedImages

ただし、それがコードが機能しない本当の理由ではありません。あなたがやろうとしていることの大きな問題は、それをする方法ではないということです!

インデックスntaggedImageのオブジェクトのプロパティを更新しようとしている場合、それはそれを行う方法ではありません。最初の問題は、CoreDataでファイルオブジェクトがどのように順序付けられているかです。名前によるものですか、日付による作成によるものですか、ランダムなものですか。あなたは知らないので、 nでアイテムを求めることはまだ意味がありません!File

データストアにクエリを実行し、特定の順序でアイテムを取得する必要があります(AppleのCoreDataチュートリアルNSFetchRequestを参照してください。

コアデータから必要な順序でファイルオブジェクトを取得したら、インデックスnでアイテムを取得し、そのタグ付きイメージを更新して保存するだけです。


PSただし、1つだけを更新するたびにすべてのアイテムを取得する必要がある場合、コアデータに多くのアイテムがあると、これは非常に非効率になります:)

于 2012-08-29T15:01:17.570 に答える