Kaydetmek ve geri yüklemek istediğim özel bir NSArray nesnesi var. Bu NSUserDefaults ile yapılabilir mi?özel nesneler dizisini kaydet ve geri yükle
cevap
Özel nesneler, no. NSUserDefaults, yalnızca birkaç temel türü (NSData, NSString, NSNumber, NSDate, NSArray veya NSDictionary) bilir.
Özel nesneyi bir dize temsiline dönüştürmek için JSON (http://code.google.com/p/json-framework/) kullanabilir, sonra bunlardan bir tanesini Varsayılanlar olarak kaydedebilir misiniz? (SetObject: forKey: yöntemini kullanarak). Aksi takdirde, sqlite, NSCoder, veya hatta fopen'e başvurmayı düşünebilirsiniz.
Özel nesneler kullanmama rağmen, kaydetmeye çalıştığım şey olan NSArray'da depolanırlar. O zaman işe yaramaz mı? –
"Yapmamalı mıyım?" "NSArray'da özel nesneleri depolayamıyorum?" cevap Evet. "NSUserDefaults öğesinde özel nesneler dizisini saklayamıyorum?" sonra cevap hayır, çünkü NSUserDefaults keyfi nesneleri depolayamaz. – Chuck
ugh! JSON? Mükemmel bir NSCoder protokolü olduğunda? – Abizern
NSUserDefaults
, özel nesneler dosya o bildiği tek olanları yazamazsınız yaklaşık (NSArray
, NSDictionary
, NSString
, NSData
, NSNumber
ve NSDate
). Bunun yerine, özel nesneleri diske kaydetmek ve geri yüklemek istiyorsanız, Archives and Serializations Programming Guide'un yanı sıra NSCoding Protocol Reference'a bir göz atmalısınız. Protokolü uygulamak çok zor değil ve çok az çalışma gerektiriyor. Eğer NSData
içine dizinizi arşiv eğer
Hala NSUserDefaults kullanabilirsiniz. Eğer kontrol edin
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
NSData *savedArray = [currentDefaults objectForKey:@"mySavedArray"];
if (savedArray != nil)
{
NSArray *oldArray = [NSKeyedUnarchiver unarchiveObjectWithData:savedArray];
if (oldArray != nil) {
customObjectArray = [[NSMutableArray alloc] initWithArray:oldArray];
} else {
customObjectArray = [[NSMutableArray alloc] init];
}
}
: Dizideki özel nesneleri yüklemek için daha sonra bu kodu
[[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:myArray] forKey:@"mySavedArray"];
Ve kullanabilirsiniz:
dizinizi Arşivleme için aşağıdaki kodu kullanabilirsiniz Bu, kullanıcı varsayılanlarından döndürülen verilerin nil
olmadığını, çünkü bu, uygulamanızı kilitleyebilir.
Yapmanız gereken diğer bir şey, özel nesnenin NSCoder
protokolüne uymasını sağlamaktır. Bunu -(void)encodeWithCoder:(NSCoder *)coder
ve -(id)initWithCoder:(NSCoder *)coder
yöntemlerini kullanarak yapabilirsiniz.
EDIT.
-(void)encodeWithCoder:(NSCoder *)coder
ve -(id)initWithCoder:(NSCoder *)coder
yöntemlerinde neler koyabileceğinizi gösteren bir örnek.
- (void)encodeWithCoder:(NSCoder *)coder;
{
[coder encodeObject:aLabel forKey:@"label"];
[coder encodeInteger:aNumberID forKey:@"numberID"];
}
- (id)initWithCoder:(NSCoder *)coder;
{
self = [[CustomObject alloc] init];
if (self != nil)
{
aLabel = [coder decodeObjectForKey:@"label"];
aNumberID = [coder decodeIntegerForKey:@"numberID"];
}
return self;
}
- 1. SublimeText 2 - Kaydet/Geri Yükle Oturum aç
- 2. Görüntüleme ve Bağlantılı Nesneler Listesini Kaydet
- 3. Dosya için bayt dizisini kaydet
- 4. Özel Kaydet İletişim Öznitelikleri Kaydet
- 5. Kaydet ve yükle crypto/rsa PrivateKey diske ve diske
- 6. Resim kırpma yükle boyutlandırma klasöre kaydet
- 7. Bir görünüm için programlı olarak oluşturulmuş görünümü kaydet ve onresume içinde geri yükle
- 8. Java Swing Kaydet ve çalışma alanı/ayarlarını yükle
- 9. SVN - Yedeklemeden depoyu geri yükle
- 10. C# ASP.NET Verileri Geri Yükle
- 11. matplotlib varsayılan eksenini geri yükle
- 12. Kalıcı Özel Nesneler
- 13. Symfony - özel genel işlevler yükle
- 14. Tensorflow'da eğitildikten sonra modeli nasıl kullanırsınız (kaydet/yükle grafiği)
- 15. Nasıl yapılır? Kaydet | Kaydet ve Kapat | ASP.NET MVC 3 RC
- 16. python, listeden ürüne geri dön, listeye geri kaydet
- 17. WCF hizmeti: Özel nesneler döndürme
- 18. Silinen Dosyaları SourceTree veya Git'ten Geri Yükle
- 19. Firefox'u Yeniden Yükle Sayfasına Geri Dön Düğmesi
- 20. chrome.fileSystem - birden fazla dosya girişini geri al/geri yükle?
- 21. htmlunit: tamamen yüklenmiş bir sayfayı geri yükle
- 22. Dosyayı oku ve belleğe kaydet
- 23. MongoDB Kaydet ve Mongo Kaydet ve Update hakkında okurken
- 24. Hızlı Java sorusu: Nesneler dizisini amaçlanan sınıfımın bir dizisine dökme
- 25. Mevcut Kısıtlama için özel ConstraintValidator kaydet
- 26. Python Paketini Özel Bitbucket Repo'dan Yükle
- 27. Yuvalanmış nesneler ve parantezler
- 28. Yeşim - nesneler ve Katmalar
- 29. enable_shared_from_this ve yığıntaki nesneler
- 30. Nesneler ve diziler ekleme
Burada herhangi bir doğru cevap var mıydı? – Joshua
@Joshua, örnek kodu sağladığınız için teşekkürler, çok yararlı. – trillions