代码之家  ›  专栏  ›  技术社区  ›  Stone

obj-c:无法创建一个实时(一次一个)从HTTP API更新单元格的UITableView。

  •  0
  • Stone  · 技术社区  · 15 年前

    我正在轮询一个HTTP API——它一次返回一个项目,实时(大约每4秒一次)。收到每个项目后,我希望填充一个新的UITableView单元格。收到的项目的完整列表必须保留在类属性中,我猜是nsmutableArray。将nsmutableArray初始化为类属性、在新信息出现时更新它,然后使用计数更新新的uiTableViewCell的最佳方法是什么? 以下是我如何向nsmutabledictionary添加内容:

    NSMutableDictionary *messageContents = [[NSMutableDictionary alloc] init];
    [messageContents retain];
    [messageContents setValue:messageText forKey:@"text"];
    [messageContents setValue:image forKey:@"image"];
    [self addMessageToDataArray:messageContents];
    

    下面是将对象填充到数组中的方法:

    - (void)addMessageToDataArray:(NSArray *)messageDictionary {
        [self.messageDataArray addObject:messageDictionary];
        NSLog(@"count = %@", [self.messageDataArray count]);
        [self reloadTableData];
    }
    

    此时,对messagedataarray类属性的调用计数会使应用程序崩溃。我非常习惯在actionscript中使用数组,obj-c显然是完全不同的。请解释将nsmutablerray实例化为类属性的方法,将其填充为nsmutabledictionary,然后查找nsmutablerray计数(将实时动态更新),以便我可以使用该信息更新uitableview(动态)。

    或者…告诉我我很傻,建议一个更简单的解决方案。

    1 回复  |  直到 9 年前
        1
  •  0
  •   CynicismRising    15 年前

    根据您的描述,我猜您在使用messagedataarray之前没有分配它。

    表视图的init函数(控制器?)类应该有这样的行

    messageDataArray = [[NSMutableArray alloc] initWithCapacity:20];
    

    也值得检查一下 [messageDataArray release]; 在DealLoc方法中。