2013-10-16 1 views
1

키 값이 @ "titleLabel"인 객체 배열 (이미지)이 백엔드 서버 (구문 분석)에 저장되어 있습니다. 내가하려는 것은 pickerView에 제목 목록을 표시하는 것이지만 키가 일치하는 @ "titleLabels"의 모든 그룹에 대해 하나의 제목 만 표시하려고합니다. 예를 들어 : titleLabel 키가있는 다섯 개의 객체 (이미지)가있는 경우 '봄 방학'나는 '봄 방학'이라는 제목의 인스턴스를 하나만 표시하고 모두 5 개만 표시하려고합니다. 내가 작성한 코드는 그것을 풀 때 나의 최고의 아마추어 샷이지만 NSLog는 'titles arrays count'가 1의 값을 리턴하고, 값을 기록 할 때 모든 타이틀을 다시 얻는다. 객체가 방금 할당 된 것과 동일한 경우 확인하려는여러 개의 동일한 값을 가진 배열에서 단일 키 값을 반환 하시겠습니까?

PFObject *image = [PFObject objectWithClassName:@"Images"]; 
     [image setObject:self.releaseDate forKey:@"releaseDate"]; 
     [image setObject:file forKey:@"file"]; 
     [image setObject:fileType forKey:@"fileType"]; 
     [image setObject:title forKey:@"titleLabel"]; 
     [image setObject:deadline forKey:@"deadline"]; 
     [image setObject:self.recipients forKey:@"recipientIds"]; 
     [image setObject:[[PFUser currentUser] objectId] forKey:@"senderId"]; 
     [image setObject:[[PFUser currentUser] username] forKey:@"senderName"]; 
     [image saveInBackground]; 

답변

0
PFObject *object = [self.objectsArray valueForKey:@"titleLabel"]; 

if(object != [self.objectsArray valueForKey:@"titleLabel"]){ 
     self.titlesArray = [self.titlesArray arrayByAddingObject:object]; 

} 

: 나는 별도의 컨트롤러 내 키를 정의 경우 여기

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

    PFQuery *query = [PFQuery queryWithClassName:@"Images"]; 
    [query whereKey:@"recipientIds" equalTo:[[PFUser currentUser] objectId]]; 
    [query orderByDescending:@"createdAt"]; 
    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 
     if (error) { 
      NSLog(@"Error: %@ %@", error, [error userInfo]); 
     } 
     else { 
      NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; 
     for(id obj in self.objectsArray){ 
      PFObject *key = [self.objectsArray valueForKey:@"titleLabel"]; 
      if(![dict objectForKey:key]){ 
       [dict setValue:obj forKey:key]; 
      } 
     } 
     for (id key in dict) { 
     NSLog(@"key: %@, value: %@ \n", key, [dict objectForKey:key]); 
     NSLog(@"Objects array is %d", [self.objectsArray count]); 
     NSLog(@"Titles array is %d", [self.titlesArray count]); 
     } 
     [self.pickerView reloadComponent:0]; 
     } 
    }]; 

그리고이다. 또한, 당신은 NSMutableArray를 사용해야하지만, 상관 없어, 나도 상관 없어. :) 것을 말하고, 당신의 다른 루프 내가 전에있는 NSMutableArray에 걸쳐 변환하는 노력이

self.objectsArray = objects; 

    NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; 
    for(id obj in self.objectsArray){ 
     PFObject *key = [self.objectsArray valueForKey:@"titleLabel"]; 
     if(![dict objectForKey:key]){ 
      [dict setValue:obj forKey:key]; 
     } 
    } 
    for (id key in dict) { 
     NSLog(@"key: %@, value: %@ \n", key, [dict objectForKey:key]); 
    } 
+0

과 같아야 생각하지만 '호환되지 않는 블록 포인터'...의 오류가 발생하는 때문에 내 제한된 지식, 나는 완전히 이해하지 못한다. 나는 왜 그것이 변경 될 필요가 있는지 이해하지만, 이미 작성된 코드를 업데이트하는 방법은 아닙니다. 또한, 구문 분석에서'addUniqueObjectsFromArray : forKey :'연산을 발견하여 대신 구현하려고 시도했지만 올바르게 작동하지는 않습니다. 어떤 충고? –

+0

몇 가지 질문이 있습니다. 내 코드를 시도 했니? 또한 arrayByAddingObject에서 반환 된 (NSArray *)를 NSMutableArray에 할당 할 수 없습니다. 그래서 사전 객체를 사용하도록 제안한 이유는 사전을 사용할 때 가장 좋은 부분은 배열 객체를 해당 키인 "springBreak"에 추가 할 수 있다는 것입니다. 그래서 springbreak에 해당하는 모든 이미지가 한 곳에 있습니다. –

+0

나는 잡았다. 그렇습니다. 그러나''dict setValue : obj forKey : key]; 키 라인에 'NSString' 타입의 매개 변수에'PFObject * '를 보내는 호환되지 않는 포인터 타입이 생깁니다. 그 문제를 해결할 수 있습니다. 나는 사전을 사용하는 것에 대한 당신의 말을 좀 얻고 싶습니다. 그것은 제가 원했던 것입니다 ... 그냥 작동시킬 수는 없습니다. (단 1 개월 반 동안 사전 프로그래밍 경험없이 iOS를 배웠고, 여전히 최소한을 말함을 배웠다.) –

관련 문제