1

我正在尝试使用 tableview/array 组合从文档目录中删除文件。出于某种原因,我NSString指向 Documents 目录路径正在被转换为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 回答