3

次のコード行でエラー メッセージが表示されます。

Team *team = [leagueLocal.teams objectAtIndex:indexpath.row];

エラーは「宣言されていない識別子 'indexpath' の使用」です...しかし、objectAtIndex: indexpath.row以外に何を入れるかわかりません。これは、このアプリの TableView 部分で機能するためです。

全体像、選択したチーム名を保存する NSUserDefaults を使用しようとしています。チーム名は、Web サービスから JSON 経由で取り込まれています。

これまでに持っている NSUserDefaults 部分の完全なコードは次のとおりです。

   // Create User Defaults Variable
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

   // Tell it where to look
Sport *sportLocal = [sports objectAtIndex:0];
League *leagueLocal = [sportLocal.leagues objectAtIndex:0];
Team *team = [leagueLocal.teams objectAtIndex:indexpath.row];  //  This is where error is

   // Store the data, this is the stuff I want to save
[defaults setObject:team.abbreviation forKey:[NSString stringWithFormat:@"teamAbbreviation%d", _buttonNumber]];

   // After saving, synchronize data
[defaults synchronize];

助けてくれてありがとう!さらに情報が必要な場合、または必要に応じてどこで明確にすることができるかをお知らせください。

編集viewDidLoad-エラーのすぐ下にNSLog を追加して、取得しているものを確認したところ、null が返されました。NSLog(@"object at index: %@", team.abbreviation);

4

1 に答える 1

7

これがviewDidLoad内にある場合、indexPath変数を初期化しない限り、それは無効になります。関数を介して渡されるため、tableViewメソッドでのみ有効です。

ただし、探しているindexPathを取得するためのオプションがいくつかあります。

Team *team = [leagueLocal.teams objectAtIndex:[NSIndexPath indexPathForRow:i inSection:k];
//where i and k are integers that indicate the row/section for the tableViewCell your looking for...(k would just be equal to 0 if you only have one section)

または、ユーザーが以前に探しているものを選択している場合は、次の方法を使用できます。

NSIndexPath *indexPath=[self.tableView indexPathForSelectedRow];
Team *team = [leagueLocal.teams objectAtIndex:indexPath.row];//now you can use it the way you have it written in your question

それが役に立てば幸い!

于 2013-03-01T00:47:10.503 に答える