即時編寫一個鬧鐘應用程序,並附有特殊的扭曲。不打算進入細節。無論如何,我試圖想出最好的方法來保存警報。我想,因爲它是一個非常基本的應用程序,它不需要核心數據。所以我打算將它們保存在NSUserDefaults下。我用NSCoding編碼對象,但我不能爲我的生活弄清楚保存它們時使用哪個鍵。最初,我打算爲每個人使用一把鑰匙。但是這將涉及到搜索任何以x開頭的內存NSUserDefaults鍵(內存很重)。也id必須找到一種有效的方法來增加鍵和迴圈時刪除一個鍵。所以然後我嘗試將警報添加到字典(我也試過一個數組),並將該對象添加到NSUserDefaults。無濟於事。有人可以幫我找出最好的方法嗎?如果它必須是核心數據,那就這樣吧。我只是覺得這是一件很簡單的事情,就像添加警報實例一樣。拍攝用戶默認設置。將多個值保存爲一個NSUserDefaults密鑰
1
A
回答
2
如何創建一個自定義類AllAlarms它會將每個警報保存在NSDictionary中,然後將其保存在NSUserDefaults中的一個鍵下。然後你可以創建類方法,當你需要它時,它返回NSUserDefauls所有報警的數組。這樣你可以搜索數組,這會更快。這是一個代碼摘錄,顯示了這個想法。它來自去年的CS193P。如果您想知道所討論的確切視頻,請告訴我。你必須確保你存儲在NSDictionary中的所有東西都是pLists。希望這可以幫助。
@property (nonatomic, strong) NSString *start;
@property (nonatomic, strong) NSString *end;
-(id)init
{
//Do not call your setters and getters in the designated initializer function of a class. Use instance variable to set the value.
self = [super self];
if(self){
_start = [NSDate date]; // returns date now
_end = _start;
}
return self;
}
-(NSTimeInterval) duration
{
//To return the different between dates you can use timeIntervalSinceDate: method
return [self.end timeIntervalSinceDate:self.start];
}
//Writing out custom class to NSUserDefaults
#define START_KEY @"StartDate"
#define END_KEY @"EndDate"
#define SCORE_KEY @"Score"
#define ALL_RESULTS_KEY @"GameResult_All"
-(void)synchronize
{
NSMutableDictionary *mutableGameResults = [[[NSUserDefaults standardUserDefaults] dictionaryForKey:ALL_RESULTS_KEY]mutableCopy]; //get a mutable copy because NSUserDefaults are not mutable
if(!mutableGameResults) mutableGameResults = [[NSMutableDictionary alloc]init];
mutableGameResults[[self.start description]] = [self asPropertyList];
[[NSUserDefaults standardUserDefaults]setObject:mutableGameResults forKey:ALL_RESULTS_KEY];
[[NSUserDefaults standardUserDefaults] syncronize];
}
-(id)initFromPropertyList:(id)pList
{
//convenience initializer
self = [self init];
if(self){
if([pList isKindOfClass:[NSDictionary class]]){
NSDictionary *resultDictionary = (NSDictionary *)pList
_start = resultDictionary[START_KEY];
_end = resultDictionary[END_KEY];
_score = [resultDictionary[SCORE_KEY] intValue];
if(!_start || !_end) self = nil;
}
}
return self;
}
-(id)asPropertyList
{
//returns a dictionaryof all the properties
return @{START_KEY : self.start, END_KEY : self.end, SCORE_KEY : @(self.score)};
}
+(NSArray) allGameResults
{
// returns all game results that are stored in NSUserDefaults in an Array
NSMutableArray *allGameResults = [[NSMutableArray alloc]init];
for(id plist in [[[NSUserDefaults standardUserDefaults] dictionaryForKey:ALL_RESULTS_KEY] allValues]){
GameResult *result = [[GameResult alloc] initFromPropertyList:pList]; // using convenience initilazer to create game results from NSUserDefaults
[allGameResults addObject:result];
}
return allGameResults;
}
相關問題
- 1. 保存多個註釋-NSUserDefaults
- 2. hbase爲一個密鑰存儲多個值
- 3. 爲多個參數創建一個唯一的密鑰(緩存密鑰)
- 4. 一個密鑰的多個值PHP
- 5. NSUserDefaults中的新密鑰/值
- 6. Perl CGI :: Session save_param將所有參數保存爲一個密鑰
- 7. XSLT 1.0:將一個值分組到多個值 - 使用密鑰?
- 8. 推動數組;將多個值存儲到單個密鑰中
- 9. 用NSMutableArray將NSDictionary保存爲NSUserDefaults的值
- 10. 存儲多個值與一個共同的密鑰,但保持在MYSQL表短?
- 11. 豬 - 密鑰的多個值
- 12. 將多個唯一密鑰合併爲一個
- 13. 將NSMutableDictionary保存爲NSUserDefaults
- 14. 將UIImage保存爲NSUserDefaults
- 15. 高效地將多個密鑰存儲在一個類別中
- 16. AFNetworking - 如何爲一個密鑰指定多個值
- 17. iPhone使用唯一密鑰加載並保存多個UIImages?
- 18. 如何保存主密鑰和一個表單值提交
- 19. 多個密鑰
- 20. 多個密鑰
- 21. MongoDB將密鑰和值從一個密鑰和值複製到另一個密鑰
- 22. 根據主密鑰將多個行轉換爲一個行
- 23. 通過密鑰將多個RDD合併爲一個列
- 24. Mysql多個唯一密鑰
- 25. 如何爲密鑰創建一個值
- 26. 如何用一個NSUserDefaults保存多個數字?
- 27. PHP將多個值存儲在密鑰中
- 28. 本地存儲多個密鑰存儲
- 29. 檢查NSUserDefaults中是否存在密鑰
- 30. 用按鈕保存一個UIScrollview到NSuserdefaults
好主意。這就是病態。 NSDictionary中的數據是一串字符串。感謝你的回答。我只是想確保這是正確的方法,以嘗試降低開銷/內存使用量 – Katushai
如果僅存儲字符串,我認爲應該沒有任何內存使用問題。我不確定,但我沒有看到人們在同一時間存儲100多個鬧鐘:)快樂編碼! – Yan
如何將多個實例保存到字典而不使用唯一鍵?有沒有辦法做到這一點? – Katushai