所以我想在Objective-C中得到一个回调设置。我使用C++,所以我一直以错误的方式击中这些东西。我找到了这个答案,并一直试图以同样的方式建模我的代码。Objective-C回调改变参数值
How to perform Callbacks in Objective-C
然而,当我在“LocationActivated”功能,使XCOORD和YCOORD似乎完全错误的价值观。
delegate.mm
- (void)Initialize {
[mWorldObj RegisterActivateDelegate: self];
}
-(void) LocationActivated :(float)xCoord :(float)yCoord {
int a;
a++;
pLocation.center = CGPointMake(xCoord, yCoord);
}
delegate.h
-(void) LocationActivated :(float)xCoord :(float)yCoord;
world.h在world.mm
id mActivateDelegate;
委托调用
float msgarr[2];
msgarr[0] = (float)((camera.VideoWidth() * 0.5f) + projX) + curLoc->mPopOffsetX;
msgarr[1] = (float)((camera.VideoHeight() * 0.5f) - projY) + curLoc->mPopOffsetY;
if(mActivateDelegate != null) {
[mActivateDelegate LocationActivated :msgarr[0] :msgarr[1]];
}
当调用msgarg [0]和[1]是完全有效的值时,〜(200,200)。但是在回调中,这些值现在完全不同了。我倾倒了双方的记忆,并没有看到任何共同点,所以我最好的猜测是我正在做的功能调用完全错误。
我还在[mActivateDelegate LocationActivated]行上发出警告,提示'Location Activated may not repsond',这是有道理的,因为只要编译器知道mActiveDelegate是'id'类型的。
任何想法我做错了什么?更好的方法来解决这个问题
编辑:从delegate.mm
- (void)RegisterActivateDelegate :(id) delegate {
mActivateDelegate = delegate;
}
我意识到这不是一个答案,但要注意这个警告。这意味着什么是错的。您应该能够在没有警告的情况下调用id类型对象上的任何已知方法。该警告可能意味着mActivateDelegate实际上并不是id类型,但在这种情况下,它可能意味着什么。 – 2011-04-06 17:50:01