0

私の問題はどこですか?Coredata に json を入力したいのですが、最後のオブジェクトのみを入力します。これは次のことを意味します。

phone.name = [[[json valueForKey:@"boxesDetail"] objectAtIndex:1] valueForKey:@"name"];
        phone.number = [NSNumber numberWithInt:[[[[json valueForKey:@"boxesDetail"] objectAtIndex:1] valueForKey:@"number"] intValue]];

以前のものではありません。

これは私のコードです:

- (void) add{
    NSManagedObjectContext *context = [app managedObjectContext];
    Phone *phone = [NSEntityDescription insertNewObjectForEntityForName:@"Phone" inManagedObjectContext:context];

    if (nameText.text.length <= 0 || numberText.text.length <= 0)
    {
        NSLog(@" hey hey, t'as pas oublié kkchose ?");
    }
    else
    {
        phone.name = nameText.text;
        phone.number = [NSNumber numberWithInt:[ numberText.text intValue]];

        NSLog(@"ADD : %@", phone.name);

        [[NSNotificationCenter defaultCenter] postNotificationName:@"Test" object:self];

        [self dismissModalViewControllerAnimated:YES];
    }


    NSString *urlString = [NSString stringWithFormat:@"http://localhost:8888/json.txt"];
    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:urlString]]; 
    NSError *err;

    NSMutableArray *json = (NSMutableArray* )[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&err];


   for (int i = 0; i != 2; i++)
    {
        phone.name = [[[json valueForKey:@"boxesDetail"] objectAtIndex:i] valueForKey:@"name"];
        phone.number = [NSNumber numberWithInt:[[[[json valueForKey:@"boxesDetail"] objectAtIndex:i] valueForKey:@"number"] intValue]];
  }


    NSFetchRequest *request = [[NSFetchRequest alloc] init];

    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Phone" inManagedObjectContext:context];

    [request setEntity:entity];

    NSArray *array  = [context executeFetchRequest:request error:&err];

    for (Phone *pho in array)
    {
        NSLog(@"NAME %@", pho.name);
        NSLog(@"PHONE %@", pho.number);
    }

}

ところで、コアデータを入力するループをコーディングしないようにするアイデアがあれば、ありがとうございます^^

4

1 に答える 1

0

次の行で管理対象オブジェクトを 1 つだけ作成します。

NSManagedObjectContext *context = [app managedObjectContext];

次に、次の行で name フィールドと number フィールドを 3 回設定します。

for (int i = 0; i != 2; i++)
{
    phone.name = [[[json valueForKey:@"boxesDetail"] objectAtIndex:i] valueForKey:@"name"];
    phone.number = [NSNumber numberWithInt:[[[[json valueForKey:@"boxesDetail"] objectAtIndex:i] valueForKey:@"number"] intValue]];
}

1 つだけではなく 3 つのオブジェクトを作成してデータを設定する必要があると思います。管理対象オブジェクトの作成をループ内に移動します。

for (int i = 0; i != 2; i++)
{
    Phone *phone = [NSEntityDescription insertNewObjectForEntityForName:@"Phone" inManagedObjectContext:context];
    phone.name = [[[json valueForKey:@"boxesDetail"] objectAtIndex:i] valueForKey:@"name"];
    phone.number = [NSNumber numberWithInt:[[[[json valueForKey:@"boxesDetail"] objectAtIndex:i] valueForKey:@"number"] intValue]];
}
于 2012-04-30T16:03:49.613 に答える