我正在编写一个与 CPP 代码集成的 iPhone 应用程序,我使用 C 接口文件作为 Objective-C 和 CPP 代码之间的通用接口。
我正在尝试使用以下代码从当前视图中显示新视图:
viewTowController *screen = [[viewTwoController alloc] initWithNibName:nil bundle:nil];
[self presentModalViewController:screen animated:YES];
我以前也使用过此代码,但它是在按钮单击事件上,它工作得非常好,但我需要根据 CPP 代码生成的事件(在从 CPP 调用的回调函数上)显示一些视图。
当我从 CPP 回调函数调用此代码时,如下所示:
-(void) displayView
{
viewTwoController *screen = [[viewTwoController alloc] initWithNibName:nil bundle:nil];
[self presentModalViewController:screen animated:YES];
}
//-- C Interface Function Implementation --//
void onDisplayView(void *self)
{
[(id) self displayView];
}
我无法看到添加到屏幕的视图,并且在控制台日志窗口中出现以下错误。
2012-12-18 18:03:02.128 p2pwebrtc[5637:5637] *** _NSAutoreleaseNoPool(): Object 0x4f04520 of class UIView autoreleased with no pool in place - just leaking
Stack: (0x305a2e6f 0x30504682 0x309778ac 0x7db6 0x7d28 0x33bb 0x6fb0 0x1af865 0x1afb4a 0x1afc5e 0x62a1 0x373e 0x4672 0x39937f 0x3ca1e4 0x3ca265 0x3cc6 0x926d8155 0x926d8012)
我在这方面做错了什么,还是有其他方法?
更新 **
正如答案中所建议的,我需要在 UI Thread 中执行此代码,为此我需要执行以下代码:
dispatch_async(dispatch_get_main_queue(), ^{
[(id) self displayView];
});
当我在 Objective-C 函数或 CPP 函数中调用此代码时,我得到 ERROR 'dispatch_get_main_queue' was not declared in this scope
。
我也在使用 OSX 版本 10.5.8 和 Xcode 版本 3.1.3