0

私の問題は、(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {} で NSMutableArray にアクセスできないことです。

ここで NSMutableArray を作成します。

nodes = [xmlDoc nodesForXPath:@"/xml/items/item/short_desc" error:nil];

if (nodes != nil && [nodes count] >= 1) {
    for (int i = 0; i < [nodes count]; i++) {
        CXMLElement *resultElement = [nodes objectAtIndex:i];
        result = [[[[resultElement attributeForName:@"data"] stringValue] copy] autorelease];       
        [short_desc addObject:result];
    }
}

そして、 short_desc の内容をどこにでも出力できます:

NSLog([short_desc objectAtIndex:0]);

しかし、そうではありません(そうすると、アプリがクラッシュします):

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

.....

NSString *date = [name objectAtIndex:0];


labelDate.text = date;
.....   

return cell;}

私が使用する場合:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

.....

NSString *date = @"text...";


labelDate.text = date;
.....   

return cell;}

それは正しく動作します。

この問題の解決策はありますか???

4

2 に答える 2

3

配列の作成方法は示していませんが、最も可能性の高い原因は、配列を保持しておらず、クラッシュするメソッドに到達する前に解放されていることです。name 配列はどのように作成していますか?..そうですね、62 のように配列を作成していることがわかります。配列を保持する必要があります。そうしないと、OS がメモリを解放し、アクセスできなくなります...代わりに実行できます

name =[ [NSMutableArray arrayWithCapacity:10] retain];

私の下のポスターは、メモリ管理に関する記事を投稿しました。それを確認する必要があります...ここにリンクがありますとにかくメモリ管理ガイド

于 2010-06-02T18:38:29.683 に答える
0

メソッド名に「alloc」、「new」、または「copy」という単語が含まれるメソッドを使用して配列を作成する場合、配列を保持する必要はありません。その他の場合、作成されたアレイは承認されたアレイです。保存する場合は、retainメソッドを送信して保持カウンターを増やす必要があります(例[names retain])。そして、それを使い終わったら(例えばdeallocメソッドで)リリースすることを忘れないでください。

メモリ管理ガイドをお読みください。

于 2010-06-02T20:19:57.387 に答える