调试时,变量在方法中间消失

时间:2015-08-18 16:57:21

标签: ios objective-c debugging nsmutablearray

我的NSMutableArray对象在函数中间消失。 Game.h:

@interface Game : NSObject
{
    NSMutableArray* boardPositions;
}

Game.m:

boardPositions=[[NSMutableArray alloc]initWithObjects:[[NSMutableString alloc]initWithString:@" "], nil];

[Players playTurnWithPlayerTurn:playerTurn andBoardPositions:boardPositions];

Players.m:

+(void) playTurnWithPlayerTurn:(BOOL)playerTurn andBoardPositions:(NSMutableArray*)boardPositions
{
    //Printing "X turn" or "O turn"
    if (playerTurn) {
        NSLog(@"O turn");
    }
    else
        NSLog(@"X turn");

    NSLog(@"Where do you want to insert the %c?",playerTurn?'O':'X');//boardPositions disappears
    char input[3];
    gets(input);
    NSString *inputString=[NSString stringWithUTF8String:input];

    //Checking user's input and implementing his choice to the board
    if ([inputString isEqualToString:@"0,0"]) {
        [boardPositions replaceObjectAtIndex:0 withObject:playerTurn?@"O":@"X"];
    }

有人知道如何解决这个问题吗?

它从这里消失了,我无法访问它:
之前:
http://i.stack.imgur.com/s6BEa.jpg
后:
http://i.stack.imgur.com/LqPu2.jpg

3 个答案:

答案 0 :(得分:0)

在调试器栏上,根据您的情况将设置从自动更改为本地所有变量。 (本地应该在调试方法时保持变量开启)

见下图:

enter image description here

答案 1 :(得分:0)

这可能与您使用类方法而不是实例方法这一事实有关。使用实例方法创建模拟版本,看看是否保留了数组。如果确实如此,那么您就迈出了解决方案的第一步。此外,我假设您没有其他操作在您的阵列上运行,并且它没有从另一个超出范围的功能中解除分配。

答案 2 :(得分:0)

你在使用ARC吗?替换:

@interface Game : NSObject
{
    NSMutableArray* boardPositions;
}

使用:

@interface Game : NSObject
{
   @property(nonatomic, strong) NSMutableArray* boardPositions;
}

并将您对boardPositions的其他引用更改为self.boardPositions。如果你不再使用它,编译器可能会优化你的数组。