2013-10-16 51 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,没有任何编程经验,至少还是学会说) –

相关问题