2013-03-20 64 views
1

嗨,我是很新到iOS程序(它已经从字面上2周),我有这样的问题:如何将NSData保存到我的应用程序中的位置?

在我的应用我拍照,并把它们上传队列,我还没有实现上传部分,但我会上传包含NSDataUIImageJPEGRepresentation)的对象(容器)数组,但显然NSData将消耗太多内存,所以我必须想出更聪明的东西而不是在我的容器类中持有NSData我想持有NSDataNSURL。但NSData必须保存在我的应用程序而不是在相机胶卷中。

我也正在实施核心数据到我的应用程序和加载NSData s可能会需要一些时间。

这里是我的容器类的样子:

#import <Foundation/Foundation.h> 
#import <CoreData/CoreData.h> 


@interface Container : NSManagedObject 

@property (nonatomic, retain) NSString * str1; 
@property (nonatomic, retain) NSString * str2; 
@property (nonatomic, retain) NSData * bigImageData; 
@property (nonatomic, retain) NSData * thumbnailData; 

@end 

@implementation Container 

@dynamic str1; 
@dynamic str2; 
@dynamic bigImageData; 
@dynamic thumbnailData; 

我不知道是否有帮助,但这里就是我得到的UIImage:

UIImage *bigImage = [info objectForKey:UIImagePickerControllerOriginalImage]; 
UIImageWriteToSavedPhotosAlbum(image,self,nil,nil); 

NSData *bigImageData = UIImageJPEGRepresentation(bigImage, 0.1); 
//Save NSData to somewhere within my app here 

所以,当我开始上传文件,我将把NSData加载回内存直到上传完成,然后我将删除NSData。

我希望我做了我的问题清楚,如果你有更好的建议,请让我知道,

谢谢!

回答

2

将数据写入Caches目录。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
NSString *cachesFolder = paths[0]; 
NSString *fullPath = [cachesFolder stringByAppendingPathComponent:@"imagename.jpg"]; 

[bigImageData writeToFile:fullPath atomically:YES]; 
+0

谢谢!我将在Core Data工作后立即尝试它,Caches目录是否有大小限制?该应用程序最终可能会向该目录写入50MB的数据。 – Malkavian 2013-03-20 02:17:58

+1

是的,存在限制 - iOS设备上剩余的可用空间量。 :)我写了多GB的文件到Caches目录没有问题。 – rmaddy 2013-03-20 02:19:22

+0

谢谢!它完美的工作,但我只是有一个问题,是否有任何方式来获取与UIIMagePickerController的图像名称? 例如,当我打开图像捕捉通常图像名称是像IMG_xxx.JPG – Malkavian 2013-03-20 20:16:27

相关问题