谁能告诉我这段代码之间的功能区别......
for (int i = 0; i < productsJSON.count; i++) { prod = [[Product alloc] init];
prod.ItemID = [[productsJSON valueForKey:@"ItemID"] objectAtIndex:i]; prod.Name = [[productsJSON valueForKey:@"Name"] objectAtIndex:i]; [self.products addObject:prod];
} [超级 viewDidLoad];
...而这段代码...
prod = [[产品分配] init]; prod.ItemID = @"SB4UL"; prod.Name = @"#4 开口螺栓 - UL 认证"; [self.products addObject:prod];
prod = [[产品分配] init]; prod.ItemID = @"PVSC07GGUL"; prod.Name = @"I 梁接地夹,UL"; [self.products addObject:prod];
[超级视图DidLoad];
...当 prod.ItemID 和 prod.Name 是 NSString 属性,并且在“for”循环中分配的值 - 退出循环后 - 被视觉确认与其他代码块分配的值相同?
据我所知,在我实际尝试将结果用于我的应用程序的那一刻之前,两者的行为完全相同。该代码出现在 UITableViewController 的 viewDidLoad 方法中。它被传递给 cellForRowAtIndexPath 方法,在那里我可以确认这些值完好无损地到达。然后我们直接进入代码块......
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ProductCell"]; 产品 *product = [self.products objectAtIndex:indexPath.row]; cell.textLabel.text = 产品名称;
如果我已注释掉第一个块并运行第二个块,则视图将完美显示。
如果我注释掉第二个块并运行第一个块,程序每次都会在“cell.textLabel.text = product.Name”处死掉,并显示一条看似随机的错误消息(例如:“线程 1:EXEC_BAD_INSTRUCTION(代码=EXC_1386_INVOP, subcode=0x0)”或“线程 1:信号 SIGABRT”或“线程 1:EXC_BAD_ACCESS(代码=1,地址=0xf069996f”)。