2011-12-28 3 views
1

Я пытаюсь загрузить контроллер представления, содержащийся в справочной библиотеке, а также отдельный пакет активов. Для этого я считаю, что мне нужно использовать метод initWithNibName. Я добавил следующие дополнительные mtouch аргументы:MonoTouch UIViewController initWithNibName

-v -v -v -gcc_flags "-L${TargetDir} -F${TargetDir} -F${ProjectDir} -F${TargetDir}/Test.embeddedframework -framework Test" 

Это Objective-C сниппет делает именно то, что мне нужно сделать:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
NSBundle *myBundle = [NSBundle bundleWithPath:[NSString stringWithFormat:@"%@/Test.embeddedframework",[[NSBundle mainBundle] bundlePath]]]; 
NSString *nib = [myBundle pathForResource:@"TestViewController" ofType:@"nib"]; 
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
self.viewController = [[TestViewController alloc] initWithNibName:@"TestViewController" bundle:myBundle]; 

self.window.rootViewController = self.viewController; 
[self.window makeKeyAndVisible]; 
return YES; 
} 

Изнутри MonoTouch, я был в состоянии загрузить скомпилировать привязок и загрузите пакет активов. Но я не знаю, как отправить сообщение «initWithNibName». Документы API не являются полными для этого метода, но показывают конструктор на UIViewController, который будет принимать имя и комплект нить. Однако это не входит в сгенерированную DLL.

http://iosapi.xamarin.com/?link=C%3aMonoTouch.UIKit.UIViewController(System.String%2cMonoTouch.Foundation.NSBundle)

Кто-нибудь есть опыт работы с делать что-то подобное или есть какие-либо предложения относительно того, как это может быть достигнуто?

ответ

1

Если у вас есть сомнения относительно селектора, один из лучших способов найти соответствие MonoTouch - использовать Meguel's Rosetta Stone. Это скажет вам, какой метод (или конструктор) был привязан к определенному селектору.

Если вы хотите унаследовать форму существующего типа (например, используя btouch), тогда вы должны написать дополнительный код (в отдельном файле .cs) для компиляции внутри сгенерированного .dll (немного похожего на дополнительный enums вам нравится для добавления в связанный API). Это возможно, так как генератор будет производить (исходные) частичные классы.

+0

Спасибо за ссылку, я раньше этого не встречал. Однако, похоже, это не очень помогает мне. Я вижу, что конструктор определен, как и в документах API, но я все еще не видел этого в сгенерированной dll. Я создал привязки для класса, но поскольку сообщение «initWithNibName» напрямую связано с UIViewController, я не определил свою собственную привязку. Это ошибка? В основном мой класс api.cs почти пуст, так как я не делаю ничего, кроме расширения UIViewController в это время. Я определил интерфейс для контроллера, но никаких дополнительных методов экземпляра. Сделать работает отлично. –

+0

Я принял совет и специально добавил конструктор в bind, например: [Export ("initWithNibName: bundle:")] IntPtr Constructor (string nibName, NSBundle bundle); но когда я пытаюсь использовать его, я получаю: Не удалось загрузить NIB в пакете: «NSBundle <..../TestHarness.app/Test.embeddedframework> (еще не загружен)» с именем «TestViewController.nib». Я был при этой ошибке в прошлом и не имеют разрешения - какие-либо дальнейшие предложения? еще раз спасибо –

Смежные вопросы