私は Objective C と Cocoa を理解しようとしているので、ここで間違った用語を使用している可能性があります。
メインの AppDelegate.h と AppDelegate.m によって読み取られるカードのデッキ用の Objective C クラスを作成しました。これには、deckOfCards と pickACard の 2 つのメソッドがあります。DeckOfCards は、すべてのカード タイプが文字列形式で記述された単なる NSMutableArray であり、pickACard で次のような新しい配列を作成します。
-(void)pickACard
{
DeckOfCards *newDeck = [[DeckOfCards alloc] init];
int r = arc4random() % 52;
NSLog (@"The card you picked is: %@, and there are %i cards left", [newDeck objectAtIndex:r], [newDeck count]);
[newDeck removeObjectAtIndex:r];
}
ただし、XCode は、この新しい配列で objectAtIndex と removeObjectAtIndex を使用できないと言っているため、カードをランダムに選択してから、配列のその部分を削除して「パックから削除」することはできません。
これはすべてがdeckOfCardsにあるときは機能しましたが、AppDelegate.mによって呼び出されると新しい配列が作成されるため、異なるカードを取得しますが、パックから複数を削除することはありません.
この新しい配列を適切に作成していないと推測します。
より明確にするために、DeckOfCards.h は次のとおりです。
#import <Foundation/Foundation.h>
@interface DeckOfCards : NSObject
{
@private
}
-(void) deckOfCards;
-(void) pickACard;
@end
DeckOfCards.m は次のとおりです。
@implementation DeckOfCards
-(void)deckOfCards
{
NSMutableArray *deckOfCards = [NSMutableArray arrayWithObjects:
@"One of Hearts", @"Two of Hearts"..., nil];
}
-(void)pickACard
{
DeckOfCards *newDeck = [[DeckOfCards alloc] init];
int r = arc4random() % 52;
NSLog (@"The card you picked is: %@, and there are %i cards left",[newDeck objectAtIndex:r], [newDeck count]);
[newDeck removeObjectAtIndex:r];
}
@end