NSCFType一直在发生,有些东西没有被释放?

时间:2012-07-01 20:44:43

标签: objective-c cocoa-touch memory-management runtime-error nsfilemanager

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


}

1 个答案:

答案 0 :(得分: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];

我的建议,不要将所有这些变量添加为实例变量,您不需要,更好地在需要时创建它们