有谁能告诉我这段代码之间的功能差异......
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];
} [super viewDidLoad];
...而且这段代码......
prod = [[Product alloc] init]; prod.ItemID = @“SB4UL”; prod.Name = @“#4 Split Bolt- UL Approved”; [self.products addObject:prod];
prod = [[Product alloc] init]; prod.ItemID = @“PVSC07GGUL”; prod.Name = @“I Beam Grounding Clamp,UL”; [self.products addObject:prod];
[super viewDidLoad];
...当prod.ItemID和prod.Name是NSString属性时,在“for”循环中分配的值 - 在退出循环后 - 在视觉上确认与另一个分配的值相同代码块?
就我所知,在我实际尝试将结果用于我的应用程序之前,两者的行为完全相同。代码出现在UITableViewController的viewDidLoad方法中。它被传递给cellForRowAtIndexPath方法,在那里我可以确认值是否完好无损。然后我们直接进入代码块......
UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@“ProductCell”]; Product * product = [self.products objectAtIndex:indexPath.row]; cell.textLabel.text = product.Name;
如果我已经注释掉了第一个块并运行了第二个块,那么视图就会显示完美。
如果我已注释掉第二个块并运行第一个块,程序每次都会在“cell.textLabel.text = product.Name”中死掉,并且它会显示一个看似随机的错误消息(例如:“Thread 1: EXEC_BAD_INSTRUCTION(code = EXC_1386_INVOP,subcode = 0x0)“或”Thread 1:signal SIGABRT“或”Thread 1:EXC_BAD_ACCESS(code = 1,adress = 0xf069996f“)。
答案 0 :(得分:0)
我真的不了解您的代码,例如:
prod.ItemID = [[productsJSON valueForKey:@"ItemID"] objectAtIndex:i];
我认为productsJSON是一个字典,然后:
[productsJSON valueForKey:@"ItemID"]; // <-- is this an array?
首先怀疑:在我看来,这会给你一个字符串吗?我错了吗?如果我错了
我现在只是猜测,但我认为你的代码应该是这样的:
for (int i = 0; i < productsJSON.count; i++) {
prod = [[Product alloc] init];
prod.ItemID = [[productsJSON objectAtIndex:i] valueForKey:@"ItemID"];
prod.Name = [[productsJSON objectAtIndex:i] valueForKey:@"Name"];
[self.products addObject:prod];
}
答案 1 :(得分:0)
productsJSON代码是viewDidLoad特有的变量。它在方法之间死亡,并且Product对象中的引用变坏了。