在for循环中传递数据时,MagicalRecord保存为null

时间:2014-03-28 11:03:32

标签: ios core-data for-loop ios7 magicalrecord

我正在使用AFNetworking来调用Web服务所有下拉数据。数据会放入responseobject,然后我会尝试将其放入CoreData

由于某种原因,数据未存储到CoreData实体中。我的代码:

    for (int i = 0; i < [[responseObject valueForKey:@"belief"] count]; i++) {

        NSString * topicID = [[[[responseObject valueForKey:@"belief"] valueForKey:@"topic"] objectAtIndex:i] valueForKey:@"_id"];
        NSString * title = [[[[responseObject valueForKey:@"belief"] valueForKey:@"topic"] objectAtIndex:i] valueForKey:@"title"];
        NSString * body = [[[[responseObject valueForKey:@"belief"] valueForKey:@"topic"] objectAtIndex:i] valueForKey:@"body"];
        NSString * category = [[[[responseObject valueForKey:@"belief"] valueForKey:@"topic"] objectAtIndex:i] valueForKey:@"category"];
        NSNumber * nFor = @([[[[[responseObject valueForKey:@"belief"] valueForKey:@"topic"] objectAtIndex:i] valueForKey:@"nFor"] intValue]);

        NSLog(@"Title being sent is %@",title);
        NSLog(@"Number of votes sent is %@",nFor);

        ExploreCD *exploreCD = [ExploreCD MR_createEntity];
        exploreCD.topicID = topicID;
        exploreCD.title = title;
        exploreCD.body = body;
        exploreCD.category = category;
        exploreCD.nFor = nFor;

        NSLog(@"Title being saved is %@",exploreCD.title);
        NSLog(@"Number of votes saved is %@",exploreCD.nFor);

        //[NSManagedObjectContext MR_contextForCurrentThread];
    }

以下是我的代码中的NSLogs正在读取的内容。任何帮助将不胜感激

2014-03-28 18:49:39.677 Karmo[8328:60b] Title being sent is a odio in
2014-03-28 18:49:39.677 Karmo[8328:60b] Number of votes sent is 0
2014-03-28 18:49:39.677 Karmo[8328:60b] Title being saved is (null)
2014-03-28 18:49:39.677 Karmo[8328:60b] Number of votes saved is (null)
2014-03-28 18:49:39.678 Karmo[8328:60b] Title being sent is amet nunc viverra dapibus
2014-03-28 18:49:39.678 Karmo[8328:60b] Number of votes sent is 0
2014-03-28 18:49:39.678 Karmo[8328:60b] Title being saved is (null)
2014-03-28 18:49:39.678 Karmo[8328:60b] Number of votes saved is (null)
2014-03-28 18:49:39.678 Karmo[8328:60b] Title being sent is semper sapien a libero nam
2014-03-28 18:49:39.678 Karmo[8328:60b] Number of votes sent is 2
2014-03-28 18:49:39.678 Karmo[8328:60b] Title being saved is (null)
2014-03-28 18:49:39.678 Karmo[8328:60b] Number of votes saved is (null)
2014-03-28 18:49:39.679 Karmo[8328:60b] -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x109346550) NO CHANGES IN ** DEFAULT ** CONTEXT - NOT SAVING

我在afnetworkwing代码的成功部分中完成for循环后,使用此代码保存这些新的CoreData实体。

    [MagicalRecord saveUsingCurrentThreadContextWithBlock:nil completion:^(BOOL success, NSError *error) {

        exploreCellData = [[ExploreCD MR_findAll] mutableCopy];

   }];

2 个答案:

答案 0 :(得分:0)

这很正常。你只创建了enities但是你忘了保存它们!

我认为你可以这样做:

NSManagedObjectContext * context = [NSManagedObjectContext MR_context]; // New context
for (int i = 0; i < [[responseObject valueForKey:@"belief"] count]; i++) {
    NSString * topicID = [[[[responseObject valueForKey:@"belief"] valueForKey:@"topic"] objectAtIndex:i] valueForKey:@"_id"];
    NSString * title = [[[[responseObject valueForKey:@"belief"] valueForKey:@"topic"] objectAtIndex:i] valueForKey:@"title"];
    NSString * body = [[[[responseObject valueForKey:@"belief"] valueForKey:@"topic"] objectAtIndex:i] valueForKey:@"body"];
    NSString * category = [[[[responseObject valueForKey:@"belief"] valueForKey:@"topic"] objectAtIndex:i] valueForKey:@"category"];
    NSNumber * nFor = @([[[[[responseObject valueForKey:@"belief"] valueForKey:@"topic"] objectAtIndex:i] valueForKey:@"nFor"] intValue]);

    NSLog(@"Title being sent is %@",title);
    NSLog(@"Number of votes sent is %@",nFor);

    ExploreCD *exploreCD = [ExploreCD MR_createEntityInContext:context];
    exploreCD.topicID = topicID;
    exploreCD.title = title;
    exploreCD.body = body;
    exploreCD.category = category;
    exploreCD.nFor = nFor;

    NSLog(@"Title being saved is %@",exploreCD.title);
    NSLog(@"Number of votes saved is %@",exploreCD.nFor);
}
// Save the datas
[context  MR_saveToPersistentStoreWithCompletion:^(BOOL success, NSError *error) {
    if (!success)
        NSLog(@"Error: %@", [error localizedDescription]);
}];

答案 1 :(得分:-1)

我认为你需要保存。比如saveWithBlock等。

[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
 for (int i = 0; i < [[responseObject valueForKey:@"belief"] count]; i++) {

        NSString * topicID = [[[[responseObject valueForKey:@"belief"] valueForKey:@"topic"] objectAtIndex:i] valueForKey:@"_id"];
        NSString * title = [[[[responseObject valueForKey:@"belief"] valueForKey:@"topic"] objectAtIndex:i] valueForKey:@"title"];
        NSString * body = [[[[responseObject valueForKey:@"belief"] valueForKey:@"topic"] objectAtIndex:i] valueForKey:@"body"];
        NSString * category = [[[[responseObject valueForKey:@"belief"] valueForKey:@"topic"] objectAtIndex:i] valueForKey:@"category"];
        NSNumber * nFor = @([[[[[responseObject valueForKey:@"belief"] valueForKey:@"topic"] objectAtIndex:i] valueForKey:@"nFor"] intValue]);

        NSLog(@"Title being sent is %@",title);
        NSLog(@"Number of votes sent is %@",nFor);

        ExploreCD *exploreCD = [ExploreCD MR_createInContext:localContext];
        exploreCD.topicID = topicID;
        exploreCD.title = title;
        exploreCD.body = body;
        exploreCD.category = category;
        exploreCD.nFor = nFor;

        NSLog(@"Title being saved is %@",exploreCD.title);
        NSLog(@"Number of votes saved is %@",exploreCD.nFor);

        //[NSManagedObjectContext MR_contextForCurrentThread];
    }
}];