2015-08-18 116 views
1

我有一个plist包含多个数组的字典。 我将在我的应用程序中定期从plist中获取数据。 该数据存储在数组中。 现在我希望每个时间,而我选择从任何数组中的元素或进入我必须确保没有被选择或者禁止使用至今元素。从plist中的一组元素中获取独特元素

那么,是否有任何可行或可行的解决方案来完成这项任务。

+0

有很多解决方案... –

+0

是的,这是可能的,例如通过保持选定项目的NSIndexSet字典。我会试着向你展示。 –

+0

顺便说一句,'从现在开始'是应用程序打开后(我们可以使用内存)?或从应用程序安装(我们可以使用NSUserDefaults)? –

回答

0

这里,

NSArray *tempArray=[[NSArray alloc] init]; 
for(NSString *strX in plistArray){ 

int index=[arrayOld indexOfObject:strX]; 

if(index==NSNotFound){ 
    [tempArray addObject:strX]; 
} 

} 

//温度阵列将具有物体不存在于oldArray。

+0

一旦从后台移除应用程序,它就会消失 –

+0

@ PareshNavadiya.Thank你的代码。但我想与你分享一个场景,将清除picture.My plist有五个数组包含静态data.I可能随机选择五个元素来自阵列。现在我有将近3000个条目,因此比较新旧条目可能会造成复杂性或延迟问题。 –

0

因此,与NSIndexSet的内存快速解决方案。

static NSMutableDictionary *referenceDictionary; 
static dispatch_once_t onceToken; 
-(BOOL)canSelectElement:(id)obj fromArray:(NSString*)arrayKey 
{ 
    dispatch_once(&onceToken, ^{ 
     referenceDictionary = [@{} mutableCopy]; 
    }); 
    // simulating a plist dic. Use your real plist dic. 
    NSDictionary *infoDictionary = @{@"NSAppKeyExample1":@[@"A", @"B"], @"UIAppKeyExample2":@[@"C", @"D"]}; 

    if (referenceDictionary[arrayKey] == nil) 
     referenceDictionary[arrayKey] = [NSMutableIndexSet indexSet]; 
    NSArray *array = infoDictionary[arrayKey]; 
    NSUInteger index = [array indexOfObject:obj]; 
    if ([referenceDictionary[arrayKey] containsIndex:index]) 
     return NO; 
    [referenceDictionary[arrayKey] addIndex:index]; 
    return YES; 
} 

如果您在app关闭时需要持久性,请将referenceDictionary存储在NSUserDefaults而不是静态var中。