2013-03-23 6 views
1
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 
     dispatch_async(queue, ^{ 
      NSError *error = nil; 

      NSURL *urlRequest = [NSURL URLWithString:[NSString stringWithFormat:@"...", URL]]; 
      NSString *json = [NSString stringWithContentsOfURL:urlRequest 
             encoding:NSASCIIStringEncoding 
             error:&error]; 

      JKParseOptionFlags options = JKParseOptionStrict; 
      NSDictionary *results = [json objectFromJSONStringWithParseOptions:options]; 

      NSString *body = [[results objectForKey:@"item"] objectForKey:@"description"]; 

      Article *article = [[Article alloc] initWithTitle:title URL:URL body:body]; 
      [self.articles insertObject:article atIndex:0]; 
     }); 

바로 외부에 나는 [self.tableView reloadData];이 있지만 바로 뒤에 NSLog(@"%d", self.articles.count);을 호출하면 0을 반환합니다. 왜 추가하지 않는 이유가 무엇입니까? 기사의 body 속성에 액세스하는 블록 내 NSLog를 호출하면 해당 객체가 인쇄되므로 개체가 잘 생성됩니다. 그리고 네, 이것이있는 메서드는 (viewDidLoad에 의해) 호출됩니다.왜 NSMutableArray에 내 객체를 추가해도 작동하지 않습니까?

+0

때 * I *이 그것은 일반적으로 내가 실제로있는 NSMutableArray 할당되지 않았 음을 의미 할 self.articles에 대한 객체이고 현재 내가 가지고있는 것은 모두 무효 포인터입니다. –

답변

3

. 그래서 당신이 할 일은 큐에 코드를 넣는 것입니다 (나중에 실행되지 않을 것입니다). 기사가 목록에 추가되었는지 확인하십시오 (나중에는 그렇지 않습니다). 큐가 코드를 실행 완료 될 때, 즉 실제로 나중에 동안을 확인하고, 코드 내부에 체크하면

...

0

articles 개체의 선언을 보지 않고 더 말할 수 없지만 일반적으로 사용하려는 NSMutableArray 개체가 nil이라는 것을 의미합니다. 기사의 body 속성을 로깅하는 것과 동시에 articles 개체도 로깅 해보십시오. 기사는 여전히 전무하고 객체를 받아 들일 수 없다 - 당신이

NSMutableArray *articles; 

같은 배열을 선언하면 그 다음은 작동하지 않습니다. 다음 옵션 중 하나를 사용하여/인스턴스화를 선언 :

NSMutableArray *articles = [NSMutableArray array]; 

또는

함수 후 약간의 시간이 완료 될 때까지 그 몸 실행을 시작하지 않도록 몸이 비동기 적으로 실행됩니다
NSMutableArray *articles = [[NSMutableArray alloc] init]; 
관련 문제