2015-01-05 2 views
-1

저는 Parse를 사용하고 있으며 등급이 정해져있는 직업이 몇 개 있습니다 (5 점 만점). 클래스를 쿼리하고 각 등급을 배열에 집어 넣은 다음 평균을 계산하고 싶습니다. 그러나 배열에 개체를 추가하려고하면 쿼리에서 반환 한 마지막 항목 만 추가하는 것처럼 보입니다. 이유를 파악할 수 없습니다. 왜이 배열에 각 항목을 추가 할 수 없습니까?

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.jobName = [self.job objectForKey:@"jobTitle"]; //jobName string 
    self.title = [NSString stringWithFormat:@"%@", self.jobName]; 
} 

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 

    PFQuery *getCompletedJobsQuery = [PFQuery queryWithClassName:@"completedJobs"]; 
    [getCompletedJobsQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 
      if (!error) { 
      self.completedJobs = objects; 
      for (PFObject *completedJob in objects) { 
       self.ratingsArray = [[NSMutableArray alloc] init]; 
       NSLog(@"RATING: %@", [completedJob objectForKey:@"customerRating"]); 
       [self.ratingsArray addObject:[completedJob objectForKey:@"customerRating"]]; 
      } 
      NSLog(@"ratings array ... %@", self.ratingsArray); 
      [self.tableView reloadData]; 
     } else { 
      NSLog(@"Error: %@ %@", error, [error userInfo]); 
     } 
    }]; 
} 

가 실행

는, 각 평가를 기록,하지만 난 배열을 인쇄하거나 길이를 확인하려고 할 때, 그것은 마지막 객체를 표시하고 다른 개체에 포함되지 않습니다

2015-01-05 13:05:00.274 Ribbit[15538:251863] RATING: 3 
2015-01-05 13:05:00.274 Ribbit[15538:251863] RATING: 5 
2015-01-05 13:05:00.274 Ribbit[15538:251863] RATING: 4 
2015-01-05 13:05:00.274 Ribbit[15538:251863] RATING: 5 
2015-01-05 13:05:00.275 Ribbit[15538:251863] ratings array ... (
                   5 
                   ) 

파스에서 물건을 가져 와서 배열에 넣는 적절한 방법은 무엇입니까?

편집 : oltman과 Jack이 지적했듯이, 루프가 실행될 때마다 배열을 다시 만들고 있으므로 배열 생성을 루프 외부로 옮기면 문제가 해결됩니다. 그것은 또한 몇 시간 동안 코딩을 중단하고 부끄러운 큐브에 앉기위한 나의 대기열입니다. 감사!

답변

3

각 루프 반복마다 새 배열 (self.ratingsArray = [[NSMutableArray alloc] init];)을 만듭니다. 이 줄을 루프 밖으로 옮기고 배열의 마지막 개체 이상으로이 줄을 만들어야합니다.

+0

적합합니다. 나는이 문제를 일으킬 수있는 것이 무엇인지 궁금해하고 싶습니다. – kevingduck

2

당신은 당신의 배열 루프의 모든 반복 재현됩니다

for (PFObject *completedJob in objects) { 
    self.ratingsArray = [[NSMutableArray alloc] init]; // HERE 
    NSLog(@"RATING: %@", [completedJob objectForKey:@"customerRating"]); 
    [self.ratingsArray addObject:[completedJob objectForKey:@"customerRating"]]; 
} 

이동하는 루프의 외부 :

self.ratingsArray = [[NSMutableArray alloc] init]; // HERE 
for (PFObject *completedJob in objects) { 
    NSLog(@"RATING: %@", [completedJob objectForKey:@"customerRating"]); 
    [self.ratingsArray addObject:[completedJob objectForKey:@"customerRating"]]; 
} 
+0

Womp womp. 고마워, 잭! – kevingduck

관련 문제