アプリケーション起動時のEXC_BAD_ACCESSエラー

私はここで奇妙なことがあります。私は、プロトコルから必要なすべてのメソッドとそれで使用するデータを持つUITableViewControllerを持っています。次に、私はこのコードを(簡略化して)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}

NSDictionary* cellData = [self.tableViewData objectAtIndex:indexPath.row];
// the rest of the code

return cell;
}

このTableViewControllerは数回クリックした後に実行する必要があります。そのため、AppDelegateや最初に読み込まれたViewControllerのどこでも呼び出されたり参照されたりしません。 しかし、私が(正常に)ビルドし、シミュレータでアプリケーションを実行すると、何かが表示される前にEXC_BAD_ACCESSエラーで終了します。私はラインをコメントするときそれを考え出した:

NSDictionary* cellData = [self.tableViewData objectAtIndex:indexPath.row];

すべて正常に動作しています。どのようにこれに何かがありますか? また、tableViewDataはviewDidLoadにロードされ、この行の前には解放されず、その他の項目はすべてokです(これより下の行も削除できます)。とにかくこのエラーを送信すべきではありませんが、アプリケーションの起動時に行われます。何がありますか?

編集: ここにはviewDidLoadメソッドがあります:

- (void)viewDidLoad {
[super viewDidLoad];

self.tableViewData = [self getABContactsWithMail]; //gets filtered contacts from addressbook, works fine
}

コードの他の部分は次のとおりです。

- (void)viewDidUnload {
[super viewDidUnload];
self.tableViewData = nil;
}

-(void)dealloc{
[tableViewData release];
[super dealloc];
}

編集: これは私がtableViewのpo tableViewDataから得るものです:cellForRowAtIndexPath:

<__NSArrayM 0xfdcfe30>(
{
email = "[email protected]";
firstName = test;
fullName = "test account";
id = 1;
lastName = account;
phone = "1 (231) 23";
},
{
email = "[email protected]";
firstName = nolast;
fullName = nolast;
id = 3;
lastName = "";
phone = "";
},
{
email = "[email protected]";
firstName = "";
fullName = nofirst;
id = 4;
lastName = nofirst;
phone = "";
},
{
email = "[email protected]";
firstName = "";
fullName = "[email protected]";
id = 5;
lastName = "";
phone = "";
}
)

編集: 私はメソッドを追加しました:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

私はダミーデータと同じ動作をします。それは何かがUITableViewControllerそれ自体に間違っているか、私のxcodeが台無しになっているようです...

1
tableViewData とは何ですか? viewDidLoad にコードを入力します。ありがとう。
追加された 著者 Lorenzo B,
他の情報を提供する必要があります。何が起こっているのかを理解することは困難です。
追加された 著者 Lorenzo B,
どのタイプのポリシーをtableViewDataプロパティに使用しますか?コピー、保持、または割り当てることはできますか?
追加された 著者 Lorenzo B,
tableViewDataとは何ですか?それはあなたが作成した配列ですか?もしそうなら、それをどのようにインスタンス化していますか?
追加された 著者 sosborn,
あなたはプロパティの宣言、初期コードとクリーンアップコードをtableViewDataの周りに表示できますか?
追加された 著者 bryanmac,
スタックトレースを含めてください。
追加された 著者 Hyperbole,
tableViewDataはNSDictionaryのNSArrayです。私がその行にブレークポイントを置くと、すべてがそこにあります。それはviewDidLoadに保持され、常にそこにあります(アドレス帳からロードされます)
追加された 著者 adnanced,
@Flex_Addictedはそれを保持する
追加された 著者 adnanced,

2 答え

私はついに試行錯誤でそれを見つけました。どうやら私のUITableViewControllerは、親クラスに既に実装されているプロトコルのいくつかを実装しています。そして、それは全体の問題だった...

無関係なエラーで無関係な場所にアプリケーション全体が壊れたのは本当にわかりません。これが私のコーディングミスであれば、コンパイラは少なくとも私に警告しなければなりません。

また、私はXcode 3で問題なくこれをやっていたことを覚えています...

私はこれをAppleにバグとして提出した...

0
追加された

あなたの方法を教えてくれますか? - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)セクション

次のようになります。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [tableViewData count];
}
0
追加された
あなたの言うとおりです。セクション数も1にする必要があります
追加された 著者 adnanced,