В базовые данные записывается только одно значение.Зачем ? - PullRequest
0 голосов
/ 20 января 2012

Я новичок, и я хотел бы хранить и извлекать данные из базы данных Core Data. Я получаю все данные из php-файла, который связывается с базой данных SQL. Этот php-файл возвращает объект JSON, который, в свою очередь, анализируется моим приложением, а затем записывается в Core Data, выполняя следующие действия:

AppDelegate.m

-(void)writeDataIntoCoreData
{
    NSManagedObjectContext *context = [self managedObjectContext];
    NSManagedObject *articles = [NSEntityDescription
                                 insertNewObjectForEntityForName:@"Articles" 
                                 inManagedObjectContext:context];

    for(int i= 0; i<[json count];i++){
        NSDictionary *info = [json objectAtIndex:i];

        NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
        [f setNumberStyle:NSNumberFormatterDecimalStyle];
        NSNumber * myNumber = [f numberFromString:[info objectForKey:@"userID"]];

        [articles setValue:myNumber forKey:@"articleID"];
        [articles setValue:[info objectForKey:@"username"] forKey:@"author"];
        [articles setValue:[info objectForKey:@"user_pic"] forKey:@"text"];
        NSLog(@"Name = %@",[info objectForKey:@"username"]);
        NSLog(@"Text = %@",[info objectForKey:@"user_pic"]);
    }
    NSError *error;
    if (![context save:&error]) {
        NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
    }


}

MainViewController.m

Здесь я пытаюсь получить все данные в базе данных Core Data путем итерации по fetchedObjects.

-(IBAction)showCD:(id)sender
{

    NSManagedObjectContext *context = [self managedObjectContext];
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription 
                                   entityForName:@"Articles" inManagedObjectContext:context];
    [fetchRequest setEntity:entity];
    NSError *error;
    NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
    for (NSManagedObject *info in fetchedObjects) {
        NSLog(@"id: %@", [info valueForKey:@"articleID"]); 
        NSLog(@"Name: %@", [info valueForKey:@"author"]);
        NSLog(@"Text: %@", [info valueForKey:@"text"]);


    }    

}

NSLog, однако, отображает только один объект, а именно первый объект, который был записан в базу данных. Что не так?

Ответы [ 2 ]

2 голосов
/ 20 января 2012

Переместите вызов на insertNewObjectForEntityForName:inManagedObjectContext: внутри вашего цикла. То, как вы это делаете сейчас, вы создаете только один управляемый объект и затем неоднократно меняете его атрибуты.

2 голосов
/ 20 января 2012

переместите

NSManagedObject *articles = [NSEntityDescription
                             insertNewObjectForEntityForName:@"Articles" 
                             inManagedObjectContext:context];

в ваш цикл,

for(int i= 0; i<[json count];i++){
    NSManagedObject *articles = [NSEntityDescription
                             insertNewObjectForEntityForName:@"Articles" 
                             inManagedObjectContext:context];
    NSDictionary *info = [json objectAtIndex:i];

    NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
    [f setNumberStyle:NSNumberFormatterDecimalStyle];
    NSNumber * myNumber = [f numberFromString:[info objectForKey:@"userID"]];

    [articles setValue:myNumber forKey:@"articleID"];
    [articles setValue:[info objectForKey:@"username"] forKey:@"author"];
    [articles setValue:[info objectForKey:@"user_pic"] forKey:@"text"];
    NSLog(@"Name = %@",[info objectForKey:@"username"]);
    NSLog(@"Text = %@",[info objectForKey:@"user_pic"]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...