2014-09-10 4 views
0

PFQuery에서 얻은 객체 배열을 로컬 NSArray에 저장하려고합니다. 나는 내부에서 그것을하려고 노력하고있어! (! error) 블록이 끝나면 블록을 떠나지 않으므로 일단 내 배열에 값을 넣는다.쿼리 결과를 로컬 NSArray에 저장하는 방법은 무엇입니까?

@interface InstallersDirectoryTVC() 

@property (nonatomic,strong) NSArray *installerName; 
@property (nonatomic, strong) NSArray *supervisors; 


@end 

//more code goes here 
- (void)viewDidLoad 
{ 
     [super viewDidLoad]; 


    PFQuery *query = [PFQuery queryWithClassName:@"InstallersInfo"]; 
    [query whereKey:@"supervisor" equalTo:@"yes"]; 
    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 

     if (!error) { 
      for (PFObject *object in objects) { 
       self.supervisors = [objects valueForKey:@"supervisor"]; 
      } 


    }else { 
     NSLog(@"Error, %@ %@",error,[error userInfo]); 
    } 


}]; 

모든 것이 self.supervisors.count 또는 NSLog와 같이 블록 내부에서 작동하지만 블록을 전혀 남겨 두지 않습니다. 그 값들을 어떻게 얻을 수 있는지 말해 주시겠습니까?

감사합니다.

+0

관리자가 부울 유형입니까? nsmutablearray에서 객체 실행 시간을 추가하십시오. 따라서 변경하십시오. – ilesh

+0

문제는 단지'supervisors' 배열을 초기화하지 않았기 때문입니다. 그것을 사용하기 전에 '초기화'하십시오. –

+0

편집 : 위의 설명이 맞습니다. NSMutableArray를 사용하고 블록 이전에 초기화해야합니다. 또한 배열의 각 PFObject에 대해 supervisor 변수에 할당하는 것처럼 보입니다. addObject 대신 배열에 추가해야합니다. –

답변

0

시도 다음 코드 당신이있는 NSMutableArray를 사용하여 블록 전에 초기화해야

__weak InstallersDirectoryTVC *weakSelf = self; 

    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 

     if (!error) { 
      for (PFObject *object in objects) { 
       weakSelf.supervisors = [objects valueForKey:@"supervisor"]; 
      } 


     }else { 
      NSLog(@"Error, %@ %@",error,[error userInfo]); 
     } 


    }]; 
0

. 또한 배열의 각 PFObject에 대해 supervisor 변수에 할당하는 것처럼 보입니다. addObject : 대신 배열에 추가해야합니다. 오타가 있었고 valueForKey :를 반복에서 현재 객체가 아닌 객체 배열과 함께 사용하려고했습니다.

@interface InstallersDirectoryTVC() 

@property (nonatomic,strong) NSArray *installerName; 
@property (nonatomic, strong) NSMutableArray *supervisors; 


@end 

//more code goes here 

// initialize the supervisors array in an init method 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    PFQuery *query = [PFQuery queryWithClassName:@"InstallersInfo"]; 
    [query whereKey:@"supervisor" equalTo:@"yes"]; 
    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 

     if (!error) { 
      for (PFObject *object in objects) { 
       [self.supervisors addObject:[object valueForKey:@"supervisor"]]; 
      } 


    }else { 
     NSLog(@"Error, %@ %@",error,[error userInfo]); 
    } 


}]; 
관련 문제