存储 NSUserDefaults (Xcode) 时避免重复

Posted

技术标签:

【中文标题】存储 NSUserDefaults (Xcode) 时避免重复【英文标题】:Avoiding duplicates when storing NSUserDefaults (Xcode) 【发布时间】:2012-04-14 19:20:36 【问题描述】:

将我的数据保存到 NSUserDefaults 以避免重复条目的最佳方法是什么?这是我现在在 viewWillAppear 中所做的事情。我正在存储字典数据的各个条目。我不知道这是否是最好的方法和建议以及如何避免重复的信息。

//
// Keep track of photos that have been viewed by storing the photo data in NSUserDefaults.
//
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSMutableArray *recentlyViewed = [[defaults objectForKey:RECENTLY_VIEWED_KEY] mutableCopy];
if (!recentlyViewed) recentlyViewed = [NSMutableArray array];        
[recentlyViewed addObject:self.imageDict];

//
// Keep only MAX number of recently viewed photos.
//
while (recentlyViewed.count > RECENTLY_VIEWED_MAX) 
    [recentlyViewed removeObjectAtIndex:0];


//
// Write the array back to NSUserDefaults and synchronize it.
//
[defaults setObject:recentlyViewed forKey:RECENTLY_VIEWED_KEY];
[defaults synchronize];

谢谢

【问题讨论】:

【参考方案1】:

如果您的意思是如何确保不存储重复项,那么最贪婪和最简单的方法(对于大量数据不是最有效的)是:

 1. Get the current values from NSUserDefault into a NSMutableArray
 2. Check in a for loop if any of the values from the NSMutableArray match with the value you are trying to save. 
 3. If it does, replace the old value with new (or don't do anything)
 4. Save the NSMutableArray back to NSUserDefault. 

我会这样做,但不建议使用大值。如果您在主线程上执行此操作并且耗时超过 5 秒,则应用程序将被终止。

【讨论】:

以上是关于存储 NSUserDefaults (Xcode) 时避免重复的主要内容,如果未能解决你的问题,请参考以下文章

xcode swift:NSUserDefaults:如果退出应用程序,则保存高分并在停止的地方重新启动它

Tableview 中的 Xcode 核心数据

Xcode:检查 UIButton 是不是隐藏,使用 NSUserDefaults

iOS7 Xcode5 开关状态 NSUserDefaults

NSUserDefaults 不适用于 Watch OS2 的 Xcode beta

如何使用 Xcode 9.3 在 iOS 开发设备中检查 [NSUserDefaults standardUserDefaults] [重复]