Save UIImage for Master Data
I am trying to save an image to Core Data. The attribute type is "Transformable". When I use the following suggestion:
// NOTHING SAVED entity.image = [UIImage imageNamed:@"a.jpg"]; [self saveContext];
There is nothing saved. But let's replace the above sentences with the following:
entity.image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"a" ofType:@"jpg"]]; [self saveContext];
entity.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://some_url/a.jpg"]]]; [self saveContext];
entity.image = UIImagePNGRepresentation([UIImage imageNamed:@"a.jpg"]); [self saveContext];
It works!!! So weird. I'm pretty sure that [UIImage imageNamed: @ "a.jpg"] returns fine. Does anyone know what happened? Pls.
My Xcode is 6.3
source to share
This is very strange behavior. I don't think it fully explains all of this, but I'll see what I can do.
differs from other ways of creating images in that it uses an automatic image cache. When you load an image with
, it is automatically cached so it can be used quickly. The intended use is for images that are used a lot, such as interface elements. It also works with images that you only use once, but there is no real benefit in this case.
does different things internally than other methods of creating images. Based on your results (I get the same thing, BTW) this causes the image to work differently for at least a while. But when you have
it, there seems to be no way to ask him how it was created or if it represents a cached image.
I believe this is a bug and I recommend reporting it to Apple. In the meantime, you have a workaround. As a security check, it might be a good idea to do something like this to avoid accidental error:
UIImage *image = // loaded in whatever way you want entity.image = [UIImage imageWithCGImage:image.CGImage];
This step shouldn't be superfluous. But, as you found, sometimes the correct path doesn't work.
[In case anyone at Apple sees this: reported as rdar: // 20717042]
source to share