【问题标题】:NSArray not finishing before TableView call?NSArray 在 TableView 调用之前没有完成?
【发布时间】:2015-08-08 21:23:20
【问题描述】:

在 viewDidLoad 我调用

if (self.selectedObjectID) {
    CoreDataHelper *cdh = [(AppDelegate *)[[UIApplication sharedApplication] delegate] cdh];
    Location *locate = (Location*)[cdh.context existingObjectWithID:self.selectedObjectID error:nil];


    self.addressValue = [
        [NSArray alloc] initWithObjects:locate.intersectionMain,
        locate.intersectionSide,
        locate.city,
        locate.zipCode,
        locate.county,
        locate.stateProvince,
        locate.country,
        locate.intersectionID,
        nil
    ];
}

当表格视图调用时:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

我的 addressValue 变量存在索引超出范围的问题。它声称数组中只有一项。有趣的是,这段代码在 iPad 上运行良好,但在 iPhone 上超出了索引范围。无论来自位置的什么值首先加载到数组中,我都只有一个。我不明白。这是时间不够用的问题吗。我该如何解决这个问题?

【问题讨论】:

  • 你在 numberOfRowsInSection? 返回什么值请注意,如果你传递给 initWithObjects 的任何变量为 nil,那么它将充当终止符,你将在数组中获得更少的元素.例如,如果 locate.city 为 nil,那么您的数组中将只有两个元素,交叉点侧和交叉点主
  • 尝试查看[[NSArray alloc] ..]; 中的每个对象值,可能返回了 nil,因此数组将停止添加其余对象。经常发生在我身上
  • 我会检查 nil 。为什么这个问题会出现在 iPhone 而不是 iPad 上的任何想法。我的源数据是一样的。
  • 我不知道为什么不同的设备有不同的结果。所有的对象都检查好了,而不是零?
  • 我最终编写了一个函数,它将传入我的值并检查是否为零。如果它为零,它将返回一个空字符串。感谢您指出 nil 终止符。

标签: ios uitableview core-data nsarray


【解决方案1】:

来自 NSArray 的模型数据应始终反映 UITableViewDatasource 中使用的内容。为此,您应该拥有加载了值的数组或一个空数组,但如果它在 UITableViewDatasource 方法中使用,则不是 nil 。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-31
    相关资源
    最近更新 更多