2014-04-03 61 views
1

我有多個陣列和我希望,以檢查是否從一個陣列由隨機selcted字符串在另一個陣列並且如果是這樣顯示的圖像檢查是從陣列

我已globaly設置plistarray1和plistarray2在H串文件,並在第m文件我有以下

代碼的最後塊與我什麼即時strugling不能得到的圖像顯示基於從plistarray產生的隨機串。

NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults]; 






NSString *path = [[NSBundle mainBundle] pathForResource: 
        @"data" ofType:@"plist"]; 







if ([[defaults objectForKey:@"truthonoff"] isEqualToString:@"YES"] && [[defaults objectForKey:@"dareonoff"] isEqualToString:@"YES"] ) { 

     self.text.text [email protected]"Are you ready for this?"; 
    [Animations fadeIn:self.text andAnimationDuration:1.0 andWait:YES]; 





     NSDictionary *plistDict1 = [[NSDictionary alloc] initWithContentsOfFile:path]; 
     NSArray * plistArray1 = plistDict1[@"truth"]; 



     NSDictionary *plistDict2 = [[NSDictionary alloc] initWithContentsOfFile:path]; 
     NSArray *plistArray2 = plistDict2[@"dare"]; 

     self.plistArray = [[plistArray1 arrayByAddingObjectsFromArray:plistArray2] mutableCopy]; 

    } 

    else if ([[defaults objectForKey:@"truthonoff"] isEqualToString:@"YES"]) { 

     self.text.text [email protected]"I hope you are feeling brave!"; 
     [Animations fadeIn:self.text andAnimationDuration:1.0 andWait:YES]; 




     NSDictionary *plistDict3 = [[NSDictionary alloc] initWithContentsOfFile:path]; 

     NSArray *plistArray3 = plistDict3[@"truth"] ; 

     self.plistArray = [plistArray3 mutableCopy]; 


     NSLog(@"%@", plistArray); 


    } 

    else if ([[defaults objectForKey:@"dareonoff"] isEqualToString:@"YES"]) { 

     self.text.text [email protected]"This could be interesting!"; 
     [Animations fadeIn:self.text andAnimationDuration:1.0 andWait:YES]; 



     NSDictionary *plistDict4 = [[NSDictionary alloc] initWithContentsOfFile:path]; 

     NSMutableArray *plistArray4 = plistDict4[@"dare"]; 

     self.plistArray = [plistArray4 mutableCopy]; 


     NSLog(@"%@", plistArray); 


    } 
    else { 
     self.text.text [email protected]"Please turn on Truth or Dare"; 
     [Animations fadeIn:self.text andAnimationDuration:1.0 andWait:YES]; 



    } 



     ////display random quote from array 

    int randV = arc4random() % self.plistArray.count; 
     NSLog(@"%@", plistArray); 


     self.text.text = self.plistArray[randV]; 
     [self.plistArray removeObjectAtIndex:randV]; 
     [Animations fadeIn:self.text andAnimationDuration:1.0 andWait:YES]; 

     //display truth or dare image 
     if ([plistArray containsObject:plistArray1]) { 
      // selectedString is from the truth array 
      self.truthimage.hidden = NO; 


     } 
+1

爲了獲得更好的性能,請使用NSSet中,而不是NSArray的。 containsObject:或者member:可以用來檢查一個對象是否存在。 – Dili

回答

1

你的代碼檢查,如果plistArray包含plistArray1對象,它不(首先,它包含plistArray1每一個對象,但不是plistArray1對象本身)。

你的代碼應該檢查文本的存在,就像這樣:

// Obtain the random quote that you plan to display 
NSString* toDisplay = self.plistArray[randV]; 
// Display the quote 
self.text.text = toDisplay; 
// Remove that quote from the plistArray 
[self.plistArray removeObjectAtIndex:randV]; 
[Animations fadeIn:self.text andAnimationDuration:1.0 andWait:YES]; 
// Now's the fix: check plistArray1 for the toDisplay object 
if ([plistArray1 containsObject:toDisplay]) { 
    // selectedString is from the truth array 
    self.truthimage.hidden = NO; 
} 

,如果你有一組取代plistArray1,這將讓你在分期常量檢查遏制這種代碼可以更加高效,而不是線性時間。

編輯:(迴應此評論道:「plistArray1被帶回作爲nil」)

這是因爲您已聲明plistArray1在你的方法的局部變量,除了有一個實例變量由相同的名稱。與此

plistArray1 = plistDict1[@"truth"]; 

替換該行

NSArray * plistArray1 = plistDict1[@"truth"]; 

來解決這個問題。

+0

我可以看到這是如何工作,並已implimented它,但如果statment劑量不會被調用? – user3246508

+0

@ user3246508你是什麼意思「的if語句劑量不會得到所謂」 - 代碼沒有達到'if'語句或代碼到達'if'聲明,但由於其條件評價爲'不進入它的身體NO'? – dasblinkenlight

+0

pslistarry1被帶回爲nul hmm?當我的兩個數組相加 – user3246508

1

從我認爲你的代碼說你正在檢查,看看是否一個plistArray是否在另一個plistArray內判斷。你只是想檢查一個字符串是否包含在數組中。你很近。試試這個:

if ([plistArray1 containsObject:self.text.text]) { 
      // selectedString is from the truth array 
      self.truthimage.hidden = NO; 
} 

由於某些變量名很難跟蹤你正在做什麼。考慮選擇更多的描述性名稱,以便更容易地瞭解正在發生的事情。

+0

plistarray1被返回爲null,所以這不會觸發。這是混淆了我現在 – user3246508