操作无法完成。不允许操作

Posted

技术标签:

【中文标题】操作无法完成。不允许操作【英文标题】:The operation couldn’t be completed. Operation not permitted 【发布时间】:2011-04-08 20:08:55 【问题描述】:

我的 iPhone 应用程序出现非常奇怪的问题。我们有一款 App 已获批准并在 App Store 上销售。它包含下载一些数据库更新的功能。更新通过 HTTP 以 ZIP 形式提供。 问题是我无法保存下载的 ZIP,因为我收到“无法完成操作。不允许操作”错误。

但是:这种情况发生在十分之二的手机上。如果手机无法保存文件,它根本无法保存。如果我从商店重新下载该应用程序,它不会改变它。但是那些能够保存 ZIP 的手机总是有能力的。所有手机都运行相同的 ios 版本,而且都是 iPhone 4。这真的让我抓狂。

如果我启动 XCode,一部手机在调试时没有出现错误,另一部给出了错误。他们总是给予。

代码如下:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
[activeResponse release];
[theConnection release];

NSLog(@"%d", [receivedData length]);
NSString *s = [[NSString alloc] initWithData:receivedData encoding:NSASCIIStringEncoding];
NSLog(@"%@", s);
[s release];
[theRequest release];   
NSString *path = [NSString stringWithFormat:@"%@/%@", [[NSBundle mainBundle] resourcePath], @"temp.zip"];
NSLog(path);
NSError * error;
if ([receivedData writeToFile:path options:NSDataWritingAtomic error:&error])
    NSLog(@"Success");
else 
    NSLog(@"Error");
if (error)
    NSLog([error description]);

有什么想法吗?

【问题讨论】:

【参考方案1】:

您不能写入应用程序包,我很惊讶它可以在您的任何设备上运行。根据你的目的,你可以写很多地方:

如果你想保存文件直到你删除它,写入文件目录:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] 如果您想在设备空间不足时允许系统将其删除(并且不在乎是否在设备备份时保存),请使用缓存目录:[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0] 如果您只是在处理时临时保存它并立即将其删除,请使用临时目录:NSTemporaryDirectory()

另外,顺便说一句,使用[directory stringByAppendingPathComponent:filename] 而不是[NSString stringWithFormat:@"%@/%@", directory, filename] 来构造路径可能更简洁。

【讨论】:

感谢您的回复(两部分)。 10 部手机中有 8 部允许您这样做。在线提供的所有示例都使用绑定路径来保存 NSData。似乎他们不应该。但是你能给我一些提示吗?如果我使用数据库(XML 文件)交付我的应用程序并且我想更新它怎么做? @Teddy:使用 NSFileManager 的fileExistsAtPath: 来测试文件是否存在于文档目录中。如果没有,您可以从包中复制版本,或者直接从包中读取它。 酷。谢谢。如果我用我的包发布一个新的数据库版本,我必须解决这个问题。但这很容易做到。感谢您的回复。

以上是关于操作无法完成。不允许操作的主要内容,如果未能解决你的问题,请参考以下文章

Azure WinRM的认证测试工具1.2无法完成操作

MS SQL执行大脚本文件时,提示“未能完成操作,存储空间不足,无法处理此命令”的解决办法

VS 2012 构建 Hello World 时出错:“操作无法完成。参数不正确”

Future和Promise

尝试添加文件,收到错误消息:操作无法完成。文件已存在

Microsoft Graph API:权限不足,无法完成操作