0

このコードの機能的な違いを誰か教えてもらえますか...

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」)。

4

2 に答える 2

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];
}
于 2013-01-15T21:00:31.627 に答える
0

@Joeは正しかった-それを見つけるためにもっと深く掘り下げなければならなかった. 配列は永続的ですが、Product クラスのプロパティはそうではありませんでした。

productsJSON コードは、viewDidLoad に固有の変数です。メソッド間で停止し、Product オブジェクトの参照がおかしくなりました。

于 2013-01-16T20:02:39.417 に答える