私は他の記事の一部を読んだことがありますが、私の場合はうまくいくような正しい解決策が見つかりませんでした。私は、メインのアプリケーションデリゲートからインスタンス化され、それがアプリケーションデリゲートから作成されたUINavigationControllerインスタンスにプッシュされる他のビューを制御するUITableViewControllerクラスを持っています。UITableViewをリロードする
UINavigationToolBarには、2つの部分に分割されたUISegmentedControlボタンがあります。ファクトリロードとユーザーロード。私はボタンが押され、そのメソッドがUIViewControllerクラスの中にあることを検出するSegmentedControlにアタッチされたアクションメソッドを持っています。私の目標は、アプリのバンドルのplistファイルから構築された新しい辞書の内容でビューをリロードすることです。私は辞書が読み込まれ、表示されるキーがそれぞれのデータフォーマットで設定されていますが、UITableViewをリロードしようとするとクラッシュします。
これは私のアクションメソッド内で動作しようとした最後のコードですが、意図したとおりに機能しません。
- (void) action:(id)sender {
UISegmentedControl *segment = (UISegmentedControl *) sender;
if ([segment selectedSegmentIndex] == 1)
{
NSLog(@"User Load Selected");
NSString *userLoadFilePath = [[NSBundle mainBundle] pathForResource:@"UserLoads" ofType:@"plist"];
NSDictionary *userLoadDictionary = [[NSDictionary alloc] initWithContentsOfFile:userLoadFilePath];
NSArray *allKeys = [userLoadDictionary allKeys];
keys = allKeys;
dictionary = userLoadDictionary;
[[self tableView] reloadData];
}
else if ([segment selectedSegmentIndex] == 0)
{
NSLog(@"Factory Load Selected");
NSString *factoryLoadFilePath = [[NSBundle mainBundle] pathForResource:@"AlliantPowder" ofType:@"plist"];
NSDictionary *factoryLoadDictionary = [[NSDictionary alloc] initWithContentsOfFile:factoryLoadFilePath];
NSArray *allKeys = [factoryLoadDictionary allKeys];
keys = allKeys;
[[self tableView] reloadData];
}
}
私はテーブルの再読み込みを取得しようとするのUIViewController内に含まれる実際のテーブルを取得しようとする試みが、運に[[self tableView] reloadData]
を呼んでいます。どんな助けもありがたいです。もっとコードが必要な場合は、お尋ねください。ありがとう!
アンドリュー
-------編集----------- ここでは、チップのアイデアを参考に新しいコードがあります。問題は解決されず、アプリはまだクラッシュします。
- (void) action:(id)sender {
// Create an instance of UISegmentedControl and set it as the sending event.
UISegmentedControl *segment = (UISegmentedControl *) sender;
// Detect which button was pressed and load a new dictionary appropriately
// Checking if userLoads was selected
if ([segment selectedSegmentIndex] == 1)
{
NSLog(@"User Load Selected");
keys = userKeys;
[[self tableView] reloadData];
}
// Checking if factoryLoads was selected
else if ([segment selectedSegmentIndex] == 0)
{
NSLog(@"Factory Load Selected");
keys = [dictionary allKeys];
[[self tableView] reloadData];
}
[segment release];
}
あなたはどこで ' - (void)action:(id)sender {'? –
アクションメソッドの実装は、UISegmentedControllerも作成され、機能するクラスRootViewController.mにあります。このクラスは 'クラスを拡張するUITableViewControllerであり、そのUITableViewを作成するための尊重されたメソッドを持っています。これが '[[self tableView] reloadData]'を呼び出す理由です。私はtableViewを抽出し、新しいキーの配列でそれをリロードすることができると思っています。セルの作成は簡単で、配列の値に基づいてタイトルを設定するだけです。 –
Andrew
おそらく、ivarsの代わりにプロパティに割り当てるべきでしょう。 ' - [NSDictionary allKeys]'はおそらくオートレリースされているので、あなたのクラッシュを引き起こします(また、リークもあります)。 –