Özel bir sınıf için NSUserDefaults
kullanamazsınız. belgelerden;
NSUserDefaults
sınıfı, su baskını gibi ortak türlerini erişmek için kolaylık yöntemler sağlar, tamsayılar, gibi Boolean ve URL'ler iki katına çıkar. NSData
, NSString
, NSNumber
, NSDate
, NSArray
veya NSDictionary
A varsayılan nesne, yani, (örneklerini bir kombinasyonu koleksiyonları ya da ) bir örneği bir özelliği listesi olmalıdır. Herhangi bir başka türde bir nesneyi saklamak istiyorsanız, NSData
'un örneğini oluşturmak için genellikle arşivlemelisiniz.
NSData
'u kullanmayı deneyin. Örneğin, bir diziye özel nesneleri yüklemek için, size
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
NSData *dataRepresentingSavedArray = [currentDefaults objectForKey:@"savedArray"];
if (dataRepresentingSavedArray != nil)
{
NSArray *oldSavedArray = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSavedArray];
if (oldSavedArray != nil)
objectArray = [[NSMutableArray alloc] initWithArray:oldSavedArray];
else
objectArray = [[NSMutableArray alloc] init];
}
verileri arşivlemek için yapabileceğiniz, kullanımı:
[[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:objectArray] forKey:@"savedArray"];
Bu bütün iş bu kadar uzun özel nesne NSCoding
protokolü ile uyumludur olarak olacak :
- (void)encodeWithCoder:(NSCoder *)coder;
{
[coder encodeObject:label forKey:@"label"];
[coder encodeInteger:numberID forKey:@"numberID"];
}
- (id)initWithCoder:(NSCoder *)coder;
{
self = [[CustomObject alloc] init];
if (self != nil)
{
label = [coder decodeObjectForKey:@"label"];
numberID = [coder decodeIntegerForKey:@"numberID"];
}
return self;
}
ABRecord
opak C tipi, bu yüzden Objective-C anlamında bir nesne değil. Yani onu genişletemezsiniz, üzerine kategori ekleyemezsiniz, mesaj gönderemezsiniz. Yapabileceğiniz tek şey, parametre olarak ABRecord
Referansı ABRecord
ile açıklanan işlevleri çağırmaktır.
Arkanı ABRecord
tarafından başvurulan bilgileri saklamak edebilmek için iki şey yapabilirsiniz:
ABRecord
s id
ABRecordGetRecordID()
tarafından alın. ABRecordID
, int32_t olarak tanımlanmıştır, böylece onu bir NSInteger
'a gönderebilir ve istediğiniz yere saklayabilirsiniz. Daha sonra kaydı ABAddressBookGetPersonWithRecordID()
veya ABAddressBookGetGroupWithRecordID()
'dan alabilirsiniz. Bununla birlikte, kayıt, kullanıcı veya başka bir uygulama tarafından değiştirilebilir veya hatta silinebilir. Kayıttaki tüm değerleri standart bir NSObject
alt sınıfına kopyalayın ve kaydetmek için yukarıda açıklandığı gibi NSCoding
kullanın.Bu durumda, elbette, kullanıcının yapabileceği kayıtlara değişiklik veya eklemelerden yararlanamazsınız. ABRecordRef bir const void *
olabilir, bu yüzden NSUserDefaults
depolamak görünmektedir
Ancak ABRecordRef'i kodlayamıyorum, çünkü bu nesne bir nesne değildir. – CodeGuy
doğru, hepsini yaptım. ama ABRecordRef – CodeGuy
@ reising1'i nasıl kodlarım? – PengOne