第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

在NSUserDefault中將自定義對象存儲在NSMutableArray中

在NSUserDefault中將自定義對象存儲在NSMutableArray中

iOS
慕尼黑8549860 2019-08-03 14:03:27
在NSUserDefault中將自定義對象存儲在NSMutableArray中我最近一直在嘗試將我的iPhone應(yīng)用程序的搜索結(jié)果存儲在NSUserDefaults集合中。我還使用它成功地保存了用戶注冊信息,但出于某種原因,試圖存儲我的自定義位置類的NSMutableArray始終是空的。在本文中,我嘗試將NSMutableArray轉(zhuǎn)換為NSData元素,但得到了相同的結(jié)果(是否可以在iPhone上使用NSUserDefault保存整數(shù)數(shù)組?)我嘗試過的代碼示例如下:保留:[prefs setObject:results forKey:@"lastResults"];[prefs synchronize];或NSData *data = [NSData dataWithBytes:&results length:sizeof(results)];[prefs setObject:data forKey:@"lastResults"];或NSData *data = [NSKeyedArchiver archivedDataWithRootObject:results];[prefs setObject:data forKey:@"lastResults"];負(fù)載:lastResults = (NSMutableArray *)[prefs objectForKey:@"lastResults"];或NSData *data = [prefs objectForKey:@"lastResults"];memcpy(&lastResults, data.bytes, data.length);或NSData *data = [prefs objectForKey:@"lastResults"];lastResults = [NSKeyedUnarchiver unarchiveObjectWithData:data];在以下建議之后,我還在我的對象中實(shí)現(xiàn)了NSCoder(忽略對NSString臨時(shí)的過度使用):#import "Location.h"@implementation Location@synthesize locationId;@synthesize companyName;@synthesize addressLine1; @synthesize addressLine2;@synthesize city;@synthesize postcode;@synthesize telephoneNumber;@synthesize description; @synthesize rating;@synthesize priceGuide;@synthesize latitude;@synthesize longitude;@synthesize userLatitude; @synthesize userLongitude;@synthesize searchType;@synthesize searchId; @synthesize distance;@synthesize applicationProviderId;@synthesize contentProviderId;- (id) initWithCoder: (NSCoder *)coder{     if (self = [super init])     {         self.locationId = [coder decodeObjectForKey:@"locationId"];         self.companyName = [coder decodeObjectForKey:@"companyName"];         self.addressLine1 = [coder decodeObjectForKey:@"addressLine1"];         self.addressLine2 = [coder decodeObjectForKey:@"addressLine2"];         self.city = [coder decodeObjectForKey:@"city"];         self.postcode = [coder decodeObjectForKey:@"postcode"];         self.telephoneNumber = [coder decodeObjectForKey:@"telephoneNumber"];         self.description = [coder decodeObjectForKey:@"description"];
查看完整描述

3 回答

?
RISEBY

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超5個(gè)贊

為了將自定義對象加載到數(shù)組中,這是我用來獲取數(shù)組的方法:

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];}

您應(yīng)該檢查從用戶默認(rèn)值返回的數(shù)據(jù)是否為零,因?yàn)槲艺J(rèn)為從無存檔會(huì)導(dǎo)致崩潰。

使用以下代碼進(jìn)行歸檔很簡單:

[[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:objectArray] forKey:@"savedArray"];

正如f3lix所指出的,您需要使您的自定義對象符合NSCoding協(xié)議。添加像下面這樣的方法應(yīng)該可以做到這一點(diǎn):

- (void)encodeWithCoder:(NSCoder *)coder;{
    [coder encodeObject:label forKey:@"label"];
    [coder encodeInteger:numberID forKey:@"numberID"];}- (id)initWithCoder:(NSCoder *)coder;{
    self = [super init];
    if (self != nil)
    {
        label = [[coder decodeObjectForKey:@"label"] retain];
        numberID = [[coder decodeIntegerForKey:@"numberID"] retain];
    }   
    return self;}




查看完整回答
反對 回復(fù) 2019-08-05
?
森欄

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超5個(gè)贊

我認(rèn)為您的代碼的問題不在于保存結(jié)果數(shù)組。它加載數(shù)據(jù)時(shí)嘗試使用

lastResults = [prefs arrayForKey:@"lastResults"];

這將返回鍵指定的數(shù)組。



查看完整回答
反對 回復(fù) 2019-08-05
  • 3 回答
  • 0 關(guān)注
  • 553 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號