2013-10-16 49 views
1

我有一個存儲在後端服務器(解析)中的鍵值爲@「titleLabel」的對象數組(圖像)。我想要做的是在pickerView中顯示標題列表,但我只想爲每個鍵匹配的@「titleLabels」組顯示一個標題。例如:如果我有五個具有titleLabel鍵的對象(圖像):'Spring Break',我只想顯示標題'Spring Break'的一個實例,而不是全部五個。我寫的代碼是我解決這個問題的最佳業餘選擇,但是我的NSLog for'titles array count'返回值爲1,當我記錄該值時,我再次獲得所有標題。從具有多個相同值的數組中返回單個鍵值?

- (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]; 
     } 
    }]; 

這裏是我在一個單獨的控制器定義了我的鑰匙:

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]; 

} 

要檢查對象是否等於你剛分配的。此外,你應該使用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

我想起來之前轉換爲NSMutableArray的,但它拋出「不兼容的塊指針」 ...的錯誤,因爲我的知識有限,我不完全明白。我明白爲什麼它需要可變,但不是如何更新已經寫好的代碼。另外,我在解析中發現了一個'addUniqueObjectsFromArray:forKey:'操作,並試圖實現它,但即使這樣也不能正常工作。有什麼建議? –

+0

這裏有幾個問題。你試過我的代碼嗎?此外,你不能分配(NSArray *)從arrayByAddingObject返回到NSMutableArray。這就是爲什麼我建議你使用字典對象,關於使用字典最好的部分是你可以添加一個數組對象到相應的鍵「springBreak」。因此,所有與春假相對應的圖像都在同一個地方。 –

+0

我陷害了。是的,但它引發了一個錯誤'不兼容的指針類型發送'PFObject *'到類型'NSString'的參數在這一行的關鍵字符串'[dict setValue:obj forKey:key];'我一直沒有能夠解決它。我有點得到你對使用字典的看法,這正是我想要的......只是無法讓它工作。 (只有大約一個半月的時間,自學了iOS,沒有任何編程經驗,至少還是學會說) –

相關問題