2015-10-19 26 views
-1

在我的應用程序的登錄程序,我公司通過服務器響應循環和保存一些數據在NSUserDefaults的:NSUserDefaults返回NSArray而不是NSDictionary。顯然,因爲iOS的9.0

NSMutableArray *unitTypeArray = [[NSMutableArray alloc] init]; 

[unitTypeArray addObject:@{@"Name":@"Item", 
            @"Description":@"Item", 
            @"ID":@"0", 
            @"Time":@"2014-12-29 12:00:00", 
            @"AddedByUserID":@"2", 
            @"Depth":@"0", 
            @"Height":@"0", 
            @"Width":@"0", 
            @"softLimit":@"10"}]; 

for (NSMutableDictionary *unitType in response) { 
    [unitType setValue:@10 forKey:@"softLimit"]; 
    [unitTypeArray addObject:unitType]; 
} 

[[NSUserDefaults standardUserDefaults] setObject:unitTypeArray forKey:@"unitTypes"]; 

後,我檢索此陣:

self.unitTypeArr = [[self.preferences objectForKey:@"unitTypes"] mutableCopy]; 

但我我回來了一個NSDictionary。這在iOS < 9.0中是完美的,但是從iOS 9.0開始,我的應用程序崩潰了。是否有修復或我必須將NSDictionary轉換爲NSArray?

+0

什麼是崩潰消息? –

+0

崩潰消息是: [__NSCFDictionary objectAtIndex:]:發送到實例的無法識別的選擇器 – Thomson

+0

您能發佈更多代碼嗎?例如,什麼是self.preferences?只是緩存的引用[NSUserDefaults standardUserDefaults]?什麼是引用objectAtIndex的代碼? unitTypeArray可能是一個字典對象數組 - 也許你想從你讀取的數組中取出數組,而不是數組本身,也許是讀出來的? –

回答

1

您正在儲存unitTypeArray納入NSUserDefault。對?因爲它是NSMutableArray;所以,你會得到陣列優先。爲什麼你期待NSDictionary

通過這種方式

NSMutableArray *unitTypeArr = [[NSUserDefaults standardUserDefaults] objectForKey:@"unitTypes"]; 
+0

因爲我收到NSDictionary: ![nsdictionary](https://www.dropbox.com/s/gski7g9ulci4fd3/Screenshot%202015-10-19%2023.03.22.png?dl=0)。 – Thomson

0

我已經找到一種方法來得到它去獲取數據。我的問題中的第一個代碼塊只在數據未被檢索之前運行。我無法理解爲什麼,但是如果我每次登錄時都運行它,它正在工作。即使它包含完全相同的數據。

相關問題