1

こんにちは私はデータベースからの値をMultableArrayに保存してからCoreDataに保存しています:

 NSMultableArray *mutary = [[NSMultableArray alloc] init];
      NSManagedObjectContext *context = [app managedObjectContext];
    for(int n=0; n<[AttributeArray count]; n++)
    {

    [mutary addObject:[[AttributeArray objectAtIndex:n] objectForKey:@"AttributName"]];
    NSLog(@"%@", mutary);
}
attributeString = [mutary componentsJoinedByString:@","];

 raume = [NSEntityDescription insertNewObjectForEntityForName:@"Raum" inManagedObjectContext:context];

raume.raumattribut = attributeString;

 if (![context save:&error]) {
 NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
 abort();

}

MultableArrayのNSLog出力は次のとおりです。

    2012-06-20 17:21:00.047 book-app[31984:15803] (
    A7OVERHEAD,
    Beamer
)

これまでのところ、正しく機能しています。これで、データベースからの2つの期待値が配列に含まれます。今、私はCoreDataからこれらの属性をフェッチしています:

    NSManagedObjectContext *context = [app managedObjectContext];
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Raum" inManagedObjectContext:context];
    [request setEntity:entity];
    NSError *error = nil;
    NSArray *events = [context executeFetchRequest:request error:&error];

for (Raum *att in events)
    {
     stringAttribute = [[events valueForKey:@"raumattribut"] componentsJoinedByString:@","];
     NSLog(@"ATTRIBUTE: %@", stringAttribute);
    }
}

ここまでは順調ですね。しかし、NSLogの出力を見ると、次のようになります。

2012-06-20 17:21:00.055 book-app[31984:15803] ATTRIBUTE: <null>,A7OVERHEAD,Beamer

CoreDataが返され、次に2つの値が返されます。それはどこから来たのですか?

誰かが助けることができますか?

前もって感謝します

4

1 に答える 1

1

編集:いくつかの調査と明確化(コメントを参照)の後、ここに私の答えがあります:NSArrayでvalueForKeyを呼び出すと、元の配列の各メンバーでvalueForKeyを呼び出すことによって各要素が作成される配列が返されます。これは、フェッチ要求によって返されたオブジェクトが合計3つあり、最初のオブジェクトにはraumattribut属性が設定されていないことを出力が示していることを意味します。

前の回答:NSArrayのインスタンス(クエリ結果)でvalueForKeyを呼び出しています。おそらくあなたはする必要がありますobjectAtIndex:0を取得します最初に、値を反復する変数を使用しますか?valueForKeyはnilを返す可能性があります。

stringAttribute = [[att valueForKey:@"raumattribut"] componentsJoinedByString:@","];

または類似。

編集:最初は、2番目の部分のforループを見逃しました。上記のコードサンプルを編集して、attrを使用しました。

于 2012-06-20T15:46:55.857 に答える