操作无法完成。不允许操作
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:
来测试文件是否存在于文档目录中。如果没有,您可以从包中复制版本,或者直接从包中读取它。
酷。谢谢。如果我用我的包发布一个新的数据库版本,我必须解决这个问题。但这很容易做到。感谢您的回复。以上是关于操作无法完成。不允许操作的主要内容,如果未能解决你的问题,请参考以下文章
MS SQL执行大脚本文件时,提示“未能完成操作,存储空间不足,无法处理此命令”的解决办法