2011-07-28 13 views
0

In the UITableViewから行を削除したい。 UITableviewはplistからデータを取得します。したがって、私は行を削除すると、plist(この場合は辞書)の対応する項目を削除するようにアプリケーションに指示します。辞書(Name)の1項目はUITableViewCellのタイトルなので、plistは次のようになります:plist(UITableView)から最初のアイテムを削除するとアプリケーションがクラッシュする

Dictionary 
     KEY(Name) 
      ITEM 
     KEY(Description) 
      ITEM 
    Dictionary 
      KEY(name) 
      .... 

) と私はそれが離れて非常に最初の行から、正常に動作し、行を削除するには、次のコードを使用します。私は最初の行を削除しようとすると、アプリがクラッシュする、私は理由が分からない。

int g = indexPath.row; 
     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *documentsDirectory = [paths objectAtIndex:0]; 
     NSString *path = [documentsDirectory stringByAppendingPathComponent:@"data.plist"]; 
     NSMutableArray *array = [[NSMutableArray alloc] initWithContentsOfFile:path]; 
     [array removeObjectAtIndex:g]; 
     [array writeToFile:path atomically:YES]; 
+0

配列に 'g '番目の要素があることをどのように知っていますか? –

+0

クラッシュログには何が表示されますか? – sergio

+0

@chrisそれはgth要素を持っている必要があります、もし私が存在しなければ行を削除することができますか? – JonasG

答えて

1

EXC_BAD_ACCESSは通常、プログラムが既に割り当て解除されたオブジェクトを使用しようとしたことを意味します。

私はあなたがその0番目の要素を試してみて、削除すると、それだけで割り当てられているため、このようなオブジェクトは、arrayことができることを疑います。あなたは簡単にここのようなのNSLogトレースを追加することでこれを確認できます。一般的には

NSMutableArray *array = [[NSMutableArray alloc] initWithContentsOfFile:path]; 
    NSLog(@"Array count: %d", [array count]); 
    [array removeObjectAtIndex:g]; 

、することができたオブジェクトを決定するために、私の提案はNSZombiesを有効です。アプリusing the "Zombies" performance tool、またはsetting an environment variableを実行すると、これを行うことができます。

また、あなたがアクセスしようとしたオブジェクトの種類を識別しますはるかにわかりやすいエラーメッセージが表示されます。

+0

です。問題は解決しました。投稿コードにwans'tという何か非常にばかげたものでした。 – JonasG