2012-12-18 178 views
0

我正在编写一个与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) 

AM我在这件事上做了什么不对,还是有其他的方法呢?

更新**

正如我需要UI线程来执行该代码的答案和建议为我需要做下面的代码:

dispatch_async(dispatch_get_main_queue(), ^{ 
    [(id) self displayView]; 
}); 

当我把这个Objective-C函数或CPP函数中的代码,我得到错误'dispatch_get_main_queue' was not declared in this scope

而且我使用OSX 10.5.8版和版本的Xcode 3.1.3

回答

1

确保你打电话到UIKit中的主线程,就像这样:

void onDisplayView(void *self) { 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [(id) self displayView]; 
    }); 
} 

如果你的目标旧版本的iOS(前GCD),你可以这样做,而不是

// assuming `self` inherits from NSObject, of course 
void onDisplayView(void *self) { 
    [self performSelectorOnMainThread:@selector(displayView) withObject:nil waitUntilDone:NO]; 
} 
+0

当我尝试做上述代码它给我错误“dispatch_async”未声明。 – User7723337

+0

您定位的是哪个版本的iOS? –

+0

iOS版本10.5.8和Xcode版本3.1.3。 – User7723337

相关问题