2014-10-06 19 views
5

üzerinde NSKeyedUnarchiver kullanılarak CGSizeZero bir görüntü verir. UIImageView dosyasını arşivlediğimde aynı şey gerçekleşir, arşivden kaldırılmamış imageView'ın görüntüsünün sıfır boyutu vardır. Ben iOS 7'de, UIImage başlık olduğunu öğrendim gibi:arşivden çıkar UIImage konusu I IOS 7 üzerinde çalışan bu kodu vardır IOS 8

UIImage : NSObject <NSSecureCoding, NSCoding> 

ama iOS 8 öyle:

Bu NSCoding protokolü benziyor
UIImage : NSObject <NSSecureCoding> 

Ben kodlamak zorunda iOS 8 üzerinde eksik gerçek görüntü verisi: iyi bir görüntü elde ettiğimden emin olmak için görüntü yerine UIImagePNGRepresentation(self.imageView.image).

Bunun neden olduğunu bilen var mı? Geriye dönük uyumluluk için mi? IOS'taki eski sürüm UIImage'un NSCoding'a uygun olmadığını fark ettim. NSSecureCoding, öğesinden dolayı

+0

Bu kod en azından benim için iOS8/Xcode6 üzerinde çalışıyor iOS8 tanıtıldı imageAsset veya traitCollection mülke ilişkilidir. {0, 0} sadece nil olan görüntüler için aldım, {640, 640} vb. Aldığım tüm diğerleri için – kabarga

+0

Benim için çalışmıyor, iOS8'de Xcode6 Sürüm 6.0.1 kullanıyorum, ya sen? – gabbler

+0

Sürüm 6.0.1 (6A317) ve iPhone 5s üzerinde çalıştı. – kabarga

cevap

7

UIImage : NSObject <NSSecureCoding> bir sorun değildir. Sorun aşağıdaki kodla yeniden olabilir

Neyse, doğruladı:

UIImage *img = [UIImage imageNamed: @"myImage"]; 
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:img]; 
UIImage *imgCopy = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 
NSLog(@"%@, %@", imgCopy, NSStringFromCGSize(imgCopy.size)); // -> (null), {0, 0} 

Öte yandan, aşağıdaki kod beklendiği gibi çalışır:

UIImage *img = [UIImage imageNamed: @"myImage"]; 
UIImage *img2 = [UIImage imageWithCGImage:img.CGImage scale:img.scale orientation:img.imageOrientation]; 
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:img2]; 
UIImage *imgCopy = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 
NSLog(@"%@, %@", imgCopy, NSStringFromCGSize(imgCopy.size)); // -> <UIImage: 0x7fa013e766f0>, {50, 53} 

Nedenini bilmiyorum belki hata? Bence

, bu

+0

'da çalıştı! Ben seninkiyle aynı sonucu elde ettim, diğer şekilde işe yaradı, ilk önce sorunu çözdüm, ImageView kopyasının görüntü boyutu sıfırdan sonra, bunun neden olduğunu düşünüyorsun? Benim soru kod self.imageView.image kullanılan, görüntü kaynak paketinden değil, önbellekten. – gabbler

+0

Eh, hiç bir fikrim yok, üzgünüm :) – rintaro

+0

Günün yarısını harcadım. facepalm. VE CEVAP İŞLERİ! –