Ios 我的方法赢了';行不通

Ios 我的方法赢了';行不通,ios,objective-c,macos,cocoa,Ios,Objective C,Macos,Cocoa,我是一个彻头彻尾的笨蛋,需要别人帮我写一个方法 该方法创建一组卡片(使用NSMutableArray)。我首先尝试用数字1-13随机加载数组(每个数字出现一次) 当我运行一个简单的测试程序来打印数组中的值时,我得到一个“buildsuccessful”,但一旦程序启动就会出错。错误显示“[\uu NSArrayM insertObject:atIndex:]:object不能为零” 一旦我明白我做错了什么,我就可以正确地扩展这个方法。谢谢 NB:这是我的第一篇帖子。这类问题可以吗 - (void

我是一个彻头彻尾的笨蛋,需要别人帮我写一个方法

该方法创建一组卡片(使用NSMutableArray)。我首先尝试用数字1-13随机加载数组(每个数字出现一次)

当我运行一个简单的测试程序来打印数组中的值时,我得到一个“buildsuccessful”,但一旦程序启动就会出错。错误显示“[\uu NSArrayM insertObject:atIndex:]:object不能为零”

一旦我明白我做错了什么,我就可以正确地扩展这个方法。谢谢

NB:这是我的第一篇帖子。这类问题可以吗

- (void) createDeck {

int r;
BOOL same;
deck = [[NSMutableArray  alloc]init];
NSNumber *randNum;// = nil;

randNum = [[NSNumber alloc]init];

[randNum  initWithInt: (arc4random()%13)+1];
[deck  addObject: randNum];          // First card added to deck

same = FALSE;

while (!same) {

    for (int i=1; i<13; i++) {

        same = FALSE;

        for (r=0; r<=i; r++) {

            [randNum  initWithInt: (arc4random()%13)+1];

            if ([deck  objectAtIndex:r] == [deck  objectAtIndex:i]) {

                same = TRUE;

            }

            [deck addObject: randNum];           // Next card added to deck

        }

    }
}
-(void)createDeck{
INTR;
布尔相同;
deck=[[NSMutableArray alloc]init];
NSNumber*randNum;/=nil;
randNum=[[NSNumber alloc]init];
[randNum initWithInt:(arc4random()%13)+1];
[牌组addObject:randNum];//第一张牌组中添加的牌
相同=错误;
而(!相同){

对于(int i=1;i您不能重新初始化randNum:

NSNumber *randNum;// = nil;

randNum = [[NSNumber alloc]init];

[randNum  initWithInt: (arc4random()%13)+1];
第三行仍然缺少作业。只需执行以下操作:

NSNumber *randNum = [[NSNumber alloc] initWithInt:(arc4random()%13)+1];
然后将其放入内部for循环中,如下所示:

BOOL same = FALSE;
NSMutableArray *deck = [[NSMutableArray  alloc] initWithCapacity:13];

[deck addObject:[[NSNumber alloc] initWithInt:(arc4random()%13)+1]]; // First card added to deck
while (!same) {
  for (int i = 1; i < 13; i++) {
    same = FALSE;
    for (int r = 0; r <= i; r++) {
        NSNumber *randNum = [randNum initWithInt:(arc4random()%13)+1]; // modern ObjC will assign a register for this outside the while loop, but restrict the variable's scope to the inner-most loop
        if ([deck objectAtIndex:r] == [deck objectAtIndex:i])
            same = TRUE;
        [deck addObject: randNum]; // Next card added to deck
    }
}
BOOL same=FALSE;
NSMutableArray*deck=[[NSMutableArray alloc]initWithCapacity:13];
[牌组添加对象:[[NSNumber alloc]initWithInt:(arc4random()%13)+1];//第一张牌添加到牌组
而(!相同){
对于(int i=1;i<13;i++){
相同=错误;

对于(int r=0;r尝试在使用
NSNumber

NSNumber * randNum = [NSNumber numberWithInt: (arc4random%13)+1];
而不是

[[NSNumber alloc] initWithInt: ]

initWithInt返回一个NSNumber,它不会填充您的变量。请将[randNum initWithInt:(…)]的两个实例更改为randNum=[randNum initWithInt:(…)]尝试了您建议的方法。不起作用。谢谢:)@Fred..这不是一个解决方案,而是对你的方法的评论。与其尝试向你的数组中添加随机数,你最好一个接一个地添加所有的数字,然后将数组中的内容四处乱序。你有很多解决方案可以在谷歌上搜索如何乱序NSArray。我最喜欢的是这个:它添加了
shuffle
方法到NSArray,您可以在任何地方使用。感谢您的快速回复,Nicholas。我添加了您在内部for循环中提到的内容。还删除了randNum=[[NSNumber alloc]init]。它仍然不起作用。是否可以显示提交的代码中的实际更改?谢谢!请记住,NSNumber是一个对象,并且使用==可以比较实际对象本身。这可能是您要查找的,也可能不是。如果您要比较对象值,您应该比较
intValue
或使用
IsEqualToNumber:
@mros这是正确的,但是对于NSNumbers,就像NSStrings一样,包含相同值的两个对象共享相同的内存地址,并且只是由框架重新计数。