Iphone 如何在Objective-c中保存应用程序资源文件夹中的文件

Iphone 如何在Objective-c中保存应用程序资源文件夹中的文件,iphone,objective-c,image,Iphone,Objective C,Image,我正在用objective-c为iphone开发一个应用程序。我的问题是,我的应用程序必须保存从url拍摄的图像。我想这个文件夹是只读的。。这是我保存图像的代码: -(void)banner:(NSString *)path{ NSData * imageData = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString: path]]; UIImage *image = [UIImage imageWithDat

我正在用objective-c为iphone开发一个应用程序。我的问题是,我的应用程序必须保存从url拍摄的图像。我想这个文件夹是只读的。。这是我保存图像的代码:

-(void)banner:(NSString *)path{
    NSData * imageData = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString: path]];
    UIImage *image = [UIImage imageWithData: imageData];
    NSString* resourcePath = [[NSBundle mainBundle] resourcePath];
    NSString* pathEnd =  [resourcePath stringByAppendingFormat:@"/banner.png"];
    NSData *data1 = [NSData dataWithData:UIImagePNGRepresentation(image)];
    NSError *writeError = nil;
    [data1 writeToFile:pathEnd options:NSDataWritingAtomic error:&writeError];
}

但当我检索图像时,它不在那个文件夹中。我能做什么?

你不能,应用程序包是只读的。您应该将任何数据保存在文档或缓存目录中

-(void)banner:(NSString *)path{
    NSData * imageData = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString: path]];
    UIImage *image = [UIImage imageWithData: imageData];

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
    NSString *filePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"banner.png"];

    NSData *data1 = [NSData dataWithData:UIImagePNGRepresentation(image)];
    NSError *writeError = nil;

   [data1 writeToFile:filePath options:NSDataWritingAtomic error:&writeError];

   if (writeError) {
      NSLog(@"Error writing file: %@", writeError);
   }
}
是否有理由先将数据转换为图像,然后再转换回
NSData
对象

如果没有,您可以这样做:

-(void)banner:(NSString *)path{
   NSData * imageData = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString: path]];
   NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);         NSString *filePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"banner.png"];       
   NSError *writeError = nil;
   [imageData writeToFile:filePath options:NSDataWritingAtomic error:&writeError];

   if (writeError) {
      NSLog(@"Error writing file: %@", writeError);
   }
}

谢谢你!我将尝试:)请允许我使用第一个代码,我尝试一些解决方案:)它对我有效,为什么你说“你不能,应用程序包是只读的。”@ArashZeinoddini它将在模拟器和越狱设备上都有效。但是在普通的iOS设备上,应用程序包是只读的。@rckoenes,很抱歉我昨天给你投了-1票,现在它被锁定了,请做一些微小的更改以再次增加你的投票;)