2015-08-18 159 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中。