0

问题是删除使用方法编写的项目writeToFile:,我似乎无法删除它。我试过 NSFileManager 但我猜这是两种不同类型的存储。

- (BOOL) removeObject: (NSString *)objectToRemove inCategory:(StorageType)category
{
    BOOL result = NO;
    NSError *removeError;
    NSString *storageFolder = [self getCategoryFor:category];

    if (objectToRemove) {
        NSFileManager *fileManager = [[NSFileManager alloc]init];

        // Find folder
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder
        NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:storageFolder];
        NSString *dataPathFormated = [dataPath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

        if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath]) {
            NSLog(@"Removing file error: folder was not found");
        }

        NSURL *destinationURL = [[NSURL alloc]initWithString:[NSString stringWithFormat:@"%@/%@",dataPathFormated,objectToRemove]];
        //NSString *destinationString = [NSString stringWithFormat:@"%@/%@",dataPath,objectToRemove];

        if ([fileManager fileExistsAtPath:[destinationURL path]]) {
            NSLog(@"destination URL for file to remove: %@", destinationURL);
            // Remove object
            result = [fileManager removeItemAtURL:destinationURL error:&removeError];
            NSLog(@"ERROR REMOVING OBJECT: %@",removeError);
        } else {
            NSLog(@"Object to remove was not found at given path");
        }
    }
    return result;
}

我使用 NSData 的方法添加对象writeToFile,我想这一定是问题所在,因为它使用 plist 来存储 NSData 其他东西,如果是 - 我如何删除这个用 编写的项目writeToFile?:

[object writeToFile:destinationString atomically:YES];

删除文件的错误消息

错误删除对象:错误域 = NSCocoaErrorDomain 代码 = 4“操作无法完成。(可可错误 4。)”用户信息 = 0xd4c4d40 {NSURL =/用户/布鲁克/图书馆/应用程序%20支持/iPhone%20模拟器/6.1/ Applications/14480FD3-9B0F-4143-BFA4-728774E7C952/Documents/FavoritesFolder/2innernaturemusic}

4

3 回答 3

5

如果您的文件存在于该路径中,您可以尝试以下操作:

    [[NSFileManager defaultManager] removeItemAtPath:[destinationURL path] error:&error];

希望这可以帮助。

于 2013-07-10T11:18:36.680 回答
4

而“出于某种原因”:您的“URL”只是一个路径,它不是有效的文件系统 URL。为此,您需要file://在实际路径之前添加前缀,或者更好的是,使用[NSURL fileURLWithPath:].

于 2013-07-10T11:21:31.797 回答
2

在这个地方

result = [fileManager removeItemAtURL:destinationURL error:&removeError];
NSLog(@"ERROR REMOVING OBJECT: %@",removeError);

您记录并且不检查结果值。真的NO吗?您应该先检查返回值,然后如果是NO,请检查removeError.

而且我更喜欢写

NSError * removeError = nil;

当声明它。可能是removeError对象包含一些旧信息。

于 2013-07-10T11:19:14.530 回答