2012-12-18 214 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

相關問題