我的應用程序中保存的NSData(包含書籤的文件引用)列表NSUserDefaults的在一定程度以下的方式,在應用過程中的任何一點:NSUserDefaults的方法setObject不節能首次
NSMutableArray *bookmarkedURLs = [[NSMutableArray alloc] init];
[bookmarkedURLs addObject:bookmark]; // 'bookmark' is a NSData object
[[NSUserDefaults standardUserDefaults] setObject:bookmarkedURLs forKey:@"AppBookmarks"];
[[NSUserDefaults standardUserDefaults] synchronize];
當應用程序啓動時我通過NSUserDefaults的檢查填充保存NSData的列表:
bookmarkedURLs = [[[NSUserDefaults standardUserDefaults] objectForKey:@"AppBookmarks"] mutableCopy];
if (bookmarkedURLs.count == 0)
{
bookmarkedURLs = [[NSMutableArray alloc] init];
NSLog(@"INITIALIZED");
}
else
{
NSLog(@"STORES NSDATA LIST");
....
}
我面對我可以在下面的工序順序的問題:
- 有由「AppBookmarks」鍵
- 保存NSData的是沒有保存的NSUserDefaults的數據NSUserDefaults的由「AppBookmarks」鍵
- 重新啓動應用程序
- 應用程序嘗試從NSUserDefaults的AppBookmarks「鍵,但始終填充的NSMutableArray發現0記錄
- 我又一個新的NSData保存到「AppBookmarks」鍵
- 重新啓動應用程序
- 應用程序嘗試從「AppBookmarks」,這填充的NSMutableArray它發現保存的記錄的時間。
- 應用程序或新的NSData除了「AppBookmarks」的任何重新啓動之後,從來沒有失敗
因此,只要沒有保存的數據和NSUserDefaults的我救了一個值,它不加載或保存的第一次。任何嘗試保存和加載的工作都是在那之後進行的。
你肯定書籤是NSURL對象?據我所知,NSUserDefault只適用於包含NSData的,的NSString,NSNumber的,NSDate的,NSArray的,或者NSDictionary的陣列。 –
感謝您指點。我糾正了我的問題。 –
嘗試更改bookmarkedURLs = [[[[NSUserDefaults standardUserDefaults] objectForKey:@「AppBookmarks」] mutableCopy]; with:bookmarkedURLs = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@「AppBookmarks」]]; – Ilario