1

tableview/array の組み合わせを使用してドキュメント ディレクトリからファイルを削除しようとしています。何らかの理由で、NSStringDocuments ディレクトリ パスへのポイントが に変換されていますNSCFType(いくつかの調査の結果、変数が解放されていないために発生していることがわかります)。このため、アプリケーションは行でクラッシュします

NSString *lastPath = [documentsDirectory stringByAppendingPathComponent:temp];

NSCFTypeメソッドを認識できないと主張していますstringByAppendingPathComponent

誰かが私を助けてくれれば幸いです(これを十分に明確に説明したことを願っています)。

- (void) tableView: (UITableView *) tableView
commitEditingStyle: (UITableViewCellEditingStyle) editingStyle
 forRowAtIndexPath: (NSIndexPath *) indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {

        NSString *temp = [directoryContent objectAtIndex:indexPath.row];

        NSLog(temp);

        NSString *lastPath = [documentsDirectory stringByAppendingPathComponent:temp];


        [[NSFileManager defaultManager] removeItemAtPath:lastPath error:nil];

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

       paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

       documentsDirectory = [paths objectAtIndex:0];
       directoryContent = [[[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsDirectory error:nil] retain];

//tableview handling below


}
4

1 に答える 1

2

それdocumentsDirectoryを修正するために自動解放されたオブジェクトに設定されているようです、

あなたはそれを保持します

documentsDirectory = [[paths objectAtIndex:0] retain];

または、このように毎回使用する直前に初期化します

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);       
documentsDirectory = [paths objectAtIndex:0];
NSString *lastPath = [documentsDirectory stringByAppendingPathComponent:temp];
[[NSFileManager defaultManager] removeItemAtPath:lastPath error:nil];

私のアドバイスは、これらすべての変数をインスタンス変数として追加しないでください。必要はありません。必要なときにいつでも作成する方がよいでしょう。

于 2012-07-01T20:49:42.043 に答える