我測試了AI的紙牌遊戲,並有問題添加任何時,我注意到一個的NSMutableArray對象的計數方法利用其addObjectsFromArray方法後,從未增加。我不僅在測試中使用addObjectsFromArray,而且在AI中添加NSArray(或NSMutableArray)的方法中,並且在這兩種情況下都沒有添加任何內容。在測試中,我創建了一個完整的52張牌套牌,洗牌,然後將這張牌交給3個AI以及一個額外的NSMutableArray。然後,我看到AI已經擁有了什麼牌,然後看看每個AI在其轉身時會發揮什麼樣的價值,然後將其回放的牌添加到其手中,然後再轉向下一個AI。NSMutableArray的不addObjectsFromArray
下面的代碼:
for(int k = 1; k < 14; k++)
{
NSLog(@"-|-|-|-|-|- Current Value: %i", k);
NSLog(@"----- Easy");
[discard addObjectsFromArray:(NSArray*)[easy playHand:(NSUInteger)k]];
NSLog(@"Discard's Count: %i", [discard count]);
for(Card* cd in discard)
{
NSLog(@"card displayed = true");
[cd displayCard];
NSLog(@"card displayed = true");
}
//[discard makeObjectsPerformSelector:@selector(displayCard)];
[easy addCards:discard];
[discard removeAllObjects];
NSLog(@"------ Medium");
blah = (NSArray*) [Medium playHand:k];
[discard addObjectsFromArray:blah];
NSLog(@"Discard's Count: %i", [discard count]);
//[discard addObjectsFromArray:[Medium playHand:(NSUInteger)k]];
for(Card* cd in discard)
{
[cd displayCard];
}
//[discard makeObjectsPerformSelector:@selector(displayCard)];
[Medium addCards:discard];
[discard removeAllObjects];
NSLog(@"------ Hard");
[discard addObjectsFromArray:[HARD playHand:(NSUInteger)k]];
for(Card* cd in discard)
{
[cd displayCard];
}
//[discard makeObjectsPerformSelector:@selector(displayCard)];
[HARD addCards:discard];
[discard removeAllObjects];
NSLog(@" ");
NSLog(@" ");
}
從這裏,丟棄應抓住通過playHand發揮的卡,這是返回一個的NSMutableArray,並addObjectsFromArray需要一個的NSArray(所有指針的課程)。我不應該直接使用下面的行傳遞它們嗎?
[discard addObjectsFromArray:[easy playHand:k]];
快速的變通辦法不起作用或者,用一個單獨的指針:
NSArray* blah = nil;
blah = [easy playHand];
[discard addObjectsFromArray:blah];
...或強制轉換的指針(我測試了這一點,它不工作) :
NSArray* blahblah = nil;
blahblah = (NSArray*)[easy playHand:k];
[discard addObjectsFromArray:blahblah];
我在做什麼錯?這不是一個自動類型轉換,還是我需要使用另一種類型轉換?或者有什麼我可以忽略的?我會嘗試讓它返回一個NSArray來代替,但AI類中的容器是一個NSMutableArray,所以我可以很容易地爲其添加卡片,而不必在每次卡片對象()都創建數組副本時)添加/刪除。 (PS:是的,一切都正確預先創建的,我只是剪掉的那部分了,因爲它提出的代碼片段相當長的和額外的的NSMutableArray持有其餘13張牌有使用ADDOBJECT計數返回13,但丟棄的。計數從不會從0改變)。
沒有。檢查我的PS。 – QuakAttak