IBOutlet Collection标签显示一个

时间:2014-01-23 22:46:03

标签: ios label uicollectionview

从Parse查询中提取对象后,我有一个连接10个标签的IBOutlet Collection视图。我的问题是,由于某种原因,它记录了10个不同的对象ID,但只通过集合视图显示了一个对象ID。这是我的代码:PFQuery * query =

[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    if (!error) {
        // The find succeeded.
        NSLog(@"Successfully retrieved %d scores.", objects.count);
        // Do something with the found objects
        int i = 0;
        for (PFObject *object in objects) {
            NSLog(@"%@", object.objectId);
            for (UILabel *EventLabel in self.EventTitles){
                (EventLabel *)self.EventTitles[i]= object.objectId;
                i++;
            }
        }

有没有人看到代码的问题只显示一个而不是10?

1 个答案:

答案 0 :(得分:0)

错误是您执行此循环

for (UILabel *EventLabel in self.EventTitles){
   EventLabel.text = object.objectId;
}

在另一个周期内

for (PFObject *object in objects) {
}

这意味着每次从对象获取新对象时,第一个都会被执行。每次从对象获取对象时,都会覆盖具有相同objectID的所有标签。结果是,最后所有标签都将显示最后分析的对象的objectID。您应该执行以下操作:

int i = 0;
for (PFObject *object in objects) {
   if (i >= [self.EventTitles count]) break;//to make sure we only write up to the max number of UILabels available in EventTitles
   (UILabel *) self.EventTitles[i].text = object.objectId;//I assume the "objectId" property of object is an NSString!
   i++;
}

您应该将“EventTitles”重命名为“eventTitles” - 这是一个常见规则,类名以大写字母开头,但实例变量则不是。如果你不改变它,它将会运行但是你可以很好地考虑你的代码。