我的自定义类及其实例出现问题

时间:2010-02-06 21:01:04

标签: iphone objective-c cocoa

我正在做一个应用,用户可以点击地图,听取不同的声音,具体取决于点击的位置。我有一个多边形的点,它的工作完美。我已经创建了音频播放列表系统,它也可以对音频文件进行排队并按顺序播放它们。这也有效。但是,我正在尝试实现一种方法,该方法检查先前是否已单击他刚刚单击的区域/多边形,以便不能一次又一次地播放相同的声音。我有一个PlaceInMap类,它保存一个区域的多边形,并且如果点击的点位于多边形等等,则进行必要的检查......

目前,我已经有两个存储在NSMutableArray中的PlaceInMap类实例,每当发生一次点击时,我遍历该数组并调用每个实例- (BOOL)checkCollisionWithLat:(NSString *)lat andLon:(NSString *)lon方法。该方法返回YES或NO,具体取决于单击是否在多边形内。这很好(我在标签上输出结果)。这是方法:

- (BOOL)checkCollisionWithLat:(NSString *)lat andLon:(NSString *)lon {
    if ( [self isLocationInsideX:lat andY:lon] ) {
        if ( currentlyHere == 0) {
            [[appDelegate audioPlayer] addToQueue:audioFileName];
            [[appDelegate audioPlayer] iterateQueue];                   
        }

        currentlyHere = 1;
        return YES;

    }
    else {

        currentlyHere = 0;      
        return NO;

    }
}

由于某种原因,currentlyHere的检查似乎不起作用,除了该类的第一个实例...部分。

这是发生的事情: 我在无限循环1获得我的初始位置。这是在实例1中,声音播放。然后我点击实例2上的多边形,它的声音播放。现在我再次点击实例一个多边形,当我再次点击声音不播放的实例二进制多边形时,它的声音播放。但每次之后,当我点击实例的一个多边形时,声音会按照它应该播放...

现在当我删除if ( currentlyHere == 0 )声音播放正确时...

目前这里是NSInteger,但我已经尝试过使用int和BOOL ......

这很奇怪......文本输出总是能正确显示我点击的多边形。

抱歉我的眼睛已经完成了错字... = P

编辑:
currentHere在类的标题中定义为实例变量。这是该类的初始化:

- (id) init {
    if (self = [super init]) {

        currentlyHere = 0;
        [self setAppDelegate:[[UIApplication sharedApplication] delegate]];

    }

    return self;
}

1 个答案:

答案 0 :(得分:1)

似乎currentlyHere变量未正确设置为零;也许当你在外面时不会调用命中检测方法。在测试之前添加一些NSLog语句以检查currentlyHere的值。

- (BOOL)checkCollisionWithLat:(NSString *)lat andLon:(NSString *)lon {
    NSLog("In checkCollisionWithLat (%d)", currentlyHere);
    if ( [self isLocationInsideX:lat andY:lon] ) {
        NSLog("Inside (%d)", currentlyHere);
        if ( currentlyHere == 0) {
            [[appDelegate audioPlayer] addToQueue:audioFileName];
            [[appDelegate audioPlayer] iterateQueue];                   
        }

        currentlyHere = 1;
        return YES;

    }
    else {
        NSLog("Outside (%d)", currentlyHere);

        currentlyHere = 0;      
        return NO;

    }
}