Свойство Restkit - NSArray всегда равно нулю

Я новичок в RestKit (у меня есть опыт работы с iOS), и у меня возникают некоторые проблемы с тем, что NSArray не заполнен RKMappingResult. Он заполняется только в фактическом "блоке", но если я вызываю его для доступа в viewDidLoad(), он просто выводит нуль.

Может ли кто-нибудь проконсультироваться или предоставить какие-либо советы/ссылки на статьи?

Большое спасибо!

Вот мой код -

-(void) loadData
{

 RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[Venue class]];
 [mapping addAttributeMappingsFromDictionary:@{
 @"name": @"name", @"location.address" : @"address", @"location.city" : @"city"}];

 NSString *urlString = [NSString stringWithFormat:@"https://api.foursquare.com/v2/venues/search?ll=55.903324,-3.171383&categoryId=4bf58dd8d48988d18f941735&client_id=%s&client_secret=%s&v=20130717", kCLIENTID, kCLIENTSECRET];
 NSURL *baseUrl = [NSURL URLWithString:urlString];

 RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:mapping method:RKRequestMethodAny pathPattern:nil keyPath:@"response.venues" statusCodes:nil];

 NSURLRequest *request = [NSURLRequest requestWithURL:baseUrl];

 RKObjectRequestOperation *operation = [[RKObjectRequestOperation alloc] initWithRequest:request responseDescriptors:@[responseDescriptor]];

 [operation setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation, RKMappingResult *result) {
 //set the array of venues to be the result of what we got back
 //NSLog(@"%@", [result array]);

 NSArray *venues = [result array];
 self.arrayOfVenues = venues; //self.arrayOfVenues is always null when I call it in the other methods
 } failure:nil];
 [operation start];
}


- (void) viewDidAppear:(BOOL)animated
{
 [super viewDidAppear:YES];
 NSLog(@"%@", self.arrayOfVenues);

}

- (void)viewDidLoad
{
 [super viewDidLoad];
 //load the venue data
 self.title = @"Venues";
 [self loadData];
 NSLog(@"%@", self.arrayOfVenues);
}
2 ответа

Попробуйте self.arrayOfVenues = [venues copy];

Я думаю, что вы можете потерять ссылку на "места", когда вы покидаете блок, и эта переменная уходит.

Также:

Он заполняется только в фактическом "блоке", но если я вызываю его для доступа в viewDidLoad(), он просто выводит нуль.

Имейте в виду, что этот блок должен завершиться до того, как вы попытаетесь получить доступ к массиву. viewDidLoad определенно будет срабатывать до завершения этого блока, и так будет viewDidAppear.


вам нужно выделить & init array. как это

NSArray *venues =[[NSArray alloc]init];
 venus=[result array];

licensed under cc by-sa 3.0 with attribution.