0

からの結果を[[RKObjectManager sharedManager] getObjectsAtPath:@"/groups" ... 配列に保存しようとしていますが、なぜ配列が私のオブジェクトを私の外部に保存しないのか疑問に思っていgetObjectsAtPathますか?

@property (strong, nonatomic) NSArray *groups;

- (void)loadGroups
{

[[RKObjectManager sharedManager]  getObjectsAtPath:@"/groups"  parameters:nil     
success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
    [self.refreshControl endRefreshing];

    self.groups = mappingResult.array;
    NSLog(@"GROUP COUNT INSIDE %@", [NSString stringWithFormat:@"%d", _groups.count]);
    NSLog(@"GROUP NAME INSIDE %@",[self.groups objectAtIndex:0]);
    NSLog(@"GROUP NAME INSIDE %@",[[self.groups objectAtIndex:0] valueForKey:@"groupName"]);
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
    [self.refreshControl endRefreshing];
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"An Error Has Occurred" message:[error localizedDescription] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alertView show];
}];

NSLog(@"GROUP NAME OUTSIDE %@",[self.groups objectAtIndex:0]);
NSLog(@"GROUP NAME OUTSIDE %@",[[self.groups objectAtIndex:0] valueForKey:@"groupName"]);
NSLog(@"GROUP COUNT OUTSIDE %@", [NSString stringWithFormat:@"%d", self.groups.count]);
}

NSLOG 出力:

2013-11-10 12:04:33.281 Test[64618:11603] GROUP NAME OUTSIDE (null)
2013-11-10 12:04:33.294 Test[64618:11603] GROUP NAME OUTSIDE (null)
2013-11-10 12:04:33.345 Test[64618:11603] GROUP COUNT OUTSIDE 0
2013-11-10 12:04:33.482 Test[64618:11603] GROUP COUNT INSIDE 1
2013-11-10 12:04:33.483 Test[64618:11603] GROUP NAME INSIDE <NSManagedObject: 0x957b990> (entity: Group; id: 0x7693570 <x-coredata://174C4545-59FF-4A3A-A3B5-29520354ADD9/Group/p1> ; data: {
    groupDescription = "Admin Group";
    groupId = 1;
    groupName = Admin;
})
2013-11-10 12:04:33.484 Test[64618:11603] GROUP NAME INSIDE Admin
4

1 に答える 1

1

「getObjectsAtPath の外側」と言うとき、それは本当に成功ブロックの外側を意味します。その理由は単純に、成功ブロックがまだ実行されていないため、プロパティにまだ値が設定されていないためです。これは、 への呼び出しgetObjectsAtPathが非同期であり、要求されたデータを取得するのに数十秒かかる可能性があるためです。成功ブロックが呼び出されるまで、データが利用可能になるとは思わないでください。(呼び出しgetObjectsAtPathは、完了するまでスレッドをブロックしません)。

于 2013-11-10T20:44:51.183 に答える