Sip*_*oza 72 core-data objective-c ios
我是iOS的新手.我一直在尝试制作一个应用程序,将从相机捕获的图像存储到其中CoreData.我现在知道如何存储像NSStrings NSDate和其他类型的数据,但努力存储图像.我读了很多文章说你必须把它写到磁盘上并写入文件,但我似乎无法理解它.
以下代码是我用于将其他数据存储到核心数据的代码.
- (IBAction)submitReportButton:(id)sender
{
UrbanRangerAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
managedObjectContext = [appDelegate managedObjectContext];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"PotholesDB" inManagedObjectContext:appDelegate.managedObjectContext];
NSManagedObject *newPothole = [[NSManagedObject alloc]initWithEntity:entity insertIntoManagedObjectContext:managedObjectContext];
[newPothole setValue:self.relevantBody.text forKey:@"relevantBody"];
[newPothole setValue:self.subjectReport.text forKey:@"subjectReport"];
[newPothole setValue:self.detailReport.text forKey:@"detailReport"];
// [newPothole setValue:self.imageView forKey:@"photo"];
NSDate *now = [NSDate date];
//NSLog(@"now : %@", now);
NSString *strDate = [[NSString alloc] initWithFormat:@"%@", now];
NSArray *arr = [strDate componentsSeparatedByString:@" "];
NSString *str;
str = [arr objectAtIndex:0];
NSLog(@"now : %@", str);
[newPothole setValue:now forKey:@"photoDate"];
[newPothole setValue:self.latitudeLabel.text forKey:@"latitude"];
[newPothole setValue:self.longitudeLabel.text forKey:@"longitude"];
[newPothole setValue:self.addressLabel.text forKey:@"streetName"];
[newPothole setValue:streeNameLocation forKey:@"location"];
NSError *error;
[managedObjectContext save:&error];
UIAlertView *ll = [[UIAlertView alloc] initWithTitle:@"Saving" message:@"Saved data" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[ll show];
}
Run Code Online (Sandbox Code Playgroud)
小智 168
您可以使用二进制数据属性类型将图像存储在Core Data中.但是你应该知道一些事情:
始终将您的UIImage转换为便携式数据格式,如png或jpg例如:
NSData *imageData = UIImagePNGRepresentation(image);
在此属性上启用"允许外部存储"
如果核心数据达到某个阈值,核心数据会将数据移动到外部文件.此文件也完全由Core Data管理,因此您不必担心它.
如果遇到性能问题,请尝试将二进制数据属性移动到单独的实体.
您应该在NSManagedObject子类的接口后面将转换抽象为NSData,因此您不必担心从UIImage到NSData的转换,反之亦然.
如果您的图像与模型中的实体没有很强的相关性,我建议将它们存储在Core Data之外.
Jem*_*igh 12
在xcdatamodelId子类中声明图像实体为NSData...您不能使用UIImage格式,因为图像数据是二进制格式.
@property (nonatomic, retain) NSData *imag;
Run Code Online (Sandbox Code Playgroud)
在Implementation文件中..转换UIImage为NSData
UIImage *sampleimage = [UIImage imageNamed:@"sampleImage.jpg"];
NSData *dataImage = UIImageJPEGRepresentation(sampleimage, 0.0);
Run Code Online (Sandbox Code Playgroud)
然后最后保存它
[obj setValue:dataImage forKey:@"imageEntity"]; // obj refers to NSManagedObject
Run Code Online (Sandbox Code Playgroud)
对于Swift 5和Swift 4.2
转换UIImage为Data:
let imageData = image.jpegData(compressionQuality: 1.0)
Run Code Online (Sandbox Code Playgroud)保存到CoreData:
let object = MyEntity(context: managedContext) //create object of type MyEntity
object.image = imageData //add image to object
do {
try managedContext.save() //save object to CoreData
} catch let error as NSError {
print("\(error), \(error.userInfo)")
}
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
76577 次 |
| 最近记录: |