2013-09-25 32 views
0

剛剛將我的XCode從4.6更新爲5,並隨附了iOS7 SDK。空陣列和iOS 7 SDK

我注意到,所有操作(如謂語過濾器等),我嘗試對空的NSArray執行或在模擬器上運行我的應用程序時,對於任何的iOS 5.1或iOS 7(仍然在努力的NSMutableArray引起異常(NSInvalidArgumentException)下載iOS 6.1) 我的數組被實例化(所以它們不是零),但它們有0個條目。

因此,用於在XCode 4.6中正常工作的代碼現在崩潰了,我必須添加一個額外的IF來檢查array.count == 0是否在我的應用程序中運行該代碼行之前。 (巨大的任務)

當我從AppStore下載我的應用程序(版本I與XCode 4.6一起發佈)到iOS7設備時,它工作得很好。

其他人也遇到過這種情況嗎?

+0

不,它在iOS 7中工作正常,不需要巨大的重做。您嘗試執行哪種操作以及如何實例化陣列?你可以給幾個代碼行失敗的例子嗎?也許你發送NSMutableArray操作到NSArray或類似的東西? –

+1

你可以顯示你看到的NSInvalidArgumentExceptions之一嗎? – bneely

+0

最後一行崩潰。此代碼在XCode 4.6.3中可用。存儲在[defaults objectForKey:@「Wards」]的NSMutableArray不是零。 NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults]; NSData * userData = [defaults objectForKey:[NSString stringWithFormat:@「%d」,UserID]]; NSMutableDictionary * userDictionary = [[NSKeyedUnarchiver unarchiveObjectWithData:userData] mutableCopy]; NSArray * SelectedWards = [[NSArray alloc] initWithArray:[defaults objectForKey:@「Wards」]]; –

回答

1

在此基礎上的代碼,我認爲存儲在值默認objectForKey:@「沃茲」]是不是數組,請仔細檢查該值

NSArray *SelectedWards = [[NSArray alloc]initWithArray:[defaults objectForKey:@"Wards"]]; 

你可以使用下面的代碼來檢查

if(![[defaults objectForKey:@"Wards"] isKindOfClass:[NSArray class]]) 
{ 
    NSLog("OOPs! Wards is not an array"); 
} 
+0

令人尷尬的是,您是正確的。謝謝。似乎我的一些臨時代碼將NSMutableDictionary存儲爲我的默認值。一旦我重置我的模擬器的內容和設置,它就起作用了。謝謝! –