2011-06-22 11 views
1

私のアプリケーションでは、コアデータをローカルストレージとして使用しています。私はそれを正しく設定し、各エンティティのNSManagedObjectのサブクラスを作成しました。しかし、自分の店に値を挿入しようとすると、JSONフィードの最後のオブジェクトだけが挿入されます。JSONフィードの最後のオブジェクトのみを格納するコアデータ

res = [JSONHandler requestJSONResponse:jsonString]; 
shows = [res valueForKeyPath:@"Show.Name"]; 
NSUInteger showIndex = 0; 
for(NSString *showName in shows){ 
    showObject = [NSEntityDescription insertNewObjectForEntityForName:@"Show" inManagedObjectContext:managedObjectContext_]; 
    showObject.name = showName; 
    showObject.iD = [[res valueForKeyPath:@"Show.Id"]objectAtIndex:showIndex]; 
    showObject.desc = [[res valueForKeyPath:@"Show.Description"]objectAtIndex:showIndex]; 
    showObject.activityType = [[res valueForKeyPath:@"Show.ActivityType"]objectAtIndex:showIndex]; 

    showIndex++; 
} 

これは、JSONフィードの最後のオブジェクトのみを格納します。どんな考え?

編集:私はこれを行う場合には、正常に動作します:

res = [JSONHandler requestJSONResponse:jsonString]; 

shows = [res valueForKeyPath:@"Show.Name"]; 

NSUInteger index = 0; 

for(NSString *showName in shows){ 
    show = [NSEntityDescription insertNewObjectForEntityForName:@"Show" inManagedObjectContext:managedObjectContext_]; 
    [show setValue:showName forKey:@"name"]; 
    [show setValue:[[res valueForKeyPath:@"Show.Id"]objectAtIndex:index] forKey:@"iD"]; 
    [show setValue:[[res valueForKeyPath:@"Show.Description"]objectAtIndex:index] forKey:@"desc"]; 
    [show setValue:[[res valueForKeyPath:@"Show.ActivityType"]objectAtIndex:index] forKey:@"activityType"]; 

    index++; 
} 

It'sは基本的に同じことが、それをisn't?しかし、上記のようにするのではなく、NSManagedObjectのサブクラスを使用したいと思います。上記のスニペットでは、NSManagedObject *の代わりにShow:show *が表示されます。

+0

JSONの外観はどうですか? 'NSLog(@" Shows:%@ "、shows)の結果は何ですか? –

+0

私は100%JSONが問題ないと確信しています。 – Magnus

+0

キャストを追加するとどうなりますか? 'showObject =(Show *)[NSEntityDescription insertNewObjectForEntityForName:@" Show "inManagedObjectContext:managedObjectContext _];' – chris

答えて

0

いくつのショーがありますか?これは、NSLog(@"Number of shows: %d.", shows.count);とすることで見つけることができます。ショーはNSArrayとします。あなたのCore Dataコードが問題なく、JSONの解析自体が間違っている可能性があります。

EDIT:また、変更を永続ストアに正しく保存していますか?

+0

ショーの数は42です。永続ストアに変更を正しく保存するとどういう意味ですか? – Magnus

0

通常、このようにいくつかのオブジェクトのうちの1つだけが保存されているのを見ると、to-manyであるべき関係がto-oneとして不適切に設定されてしまうという問題があります。リレーションシップに追加しようとするオブジェクトの数にかかわらず、リレーションシップは1つの値しか保持できないため、最後のオブジェクトのみが設定されます。

私は、この問題は、データモデル自体が汎用のNSManagedObjectsで動作するため、データモデル自体ではなくカスタムサブクラスのコードで発生する可能性が高いと思います。

関連する問題