このコードの機能的な違いを誰か教えてもらえますか...
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 = [[製品割り当て] 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];
[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;
最初のブロックをコメントアウトして 2 番目のブロックを実行すると、ビューは問題なく表示されます。
2 番目のブロックをコメントアウトして最初のブロックを実行すると、プログラムは毎回 "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, address=0xf069996f」)。