Пример кода RoboVM: ожидается, что окна приложений будут иметь корневой контроллер представления в конце запуска приложения.

Я только что открыл для себя потрясающую RoboVM и хотел попробовать ее. На данный момент, в качестве первого шага, я хочу попробовать два примера на странице "Начало работы" страница. К сожалению, я уже застрял здесь.

Я пробовал примеры командной строки, а не примеры плагинов eclipse (я не использую eclipse).

Пример HelloWorld работал отлично. Но у меня проблема с примером IOSDemo. Он отлично компилируется с javac и, кажется, правильно обрабатывается RoboVM. Проблема в том, что после запуска симулятора iPhone в терминал пишется следующее:

2014-06-01 07:14:25.820 IOSDemo[324:70b] Application windows are expected to have a root view controller at the end of application launch

и в симуляторе ничего не отображается (пустой экран).

Вот полный вывод и то, что я написал в терминале:

Xxxs-Mac:IOSDemo xxx$ javac -cp ../../../robovm-0.0.13/lib/robovm-rt.jar:../../../robovm-0.0.13/lib/robovm-objc.jar:../../../robovm-0.0.13/lib/robovm-cocoatouch.jar -d classes/ IOSDemo.java
Xxxs-Mac:IOSDemo xxx$ ../../../robovm-0.0.13/bin/robovm -verbose -arch x86 -os ios -cp ../../../robovm-0.0.13/lib/robovm-objc.jar:../../../robovm-0.0.13/lib/robovm-cocoatouch.jar:classes/ -run IOSDemo
Compiling IOSDemo (ios x86)
Compiling IOSDemo$1 (ios x86)
Linking 2009 classes
Building executable /var/folders/0y/k5k7wl3510d_7p8g6k9mjgc80000gn/T/robovm1960244380699928960.tmp/IOSDemo
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -o /var/folders/0y/k5k7wl3510d_7p8g6k9mjgc80000gn/T/robovm1960244380699928960.tmp/IOSDemo -g -arch i386 -Wl,-filelist,/var/folders/0y/k5k7wl3510d_7p8g6k9mjgc80000gn/T/robovm1960244380699928960.tmp/objects -L "/Volumes/My Disk/robovm/robovm-0.0.13/lib/vm/ios/x86" -ObjC -exported_symbols_list /var/folders/0y/k5k7wl3510d_7p8g6k9mjgc80000gn/T/robovm1960244380699928960.tmp/exported_symbols -Wl,-no_implicit_dylibs -Wl,-dead_strip -mios-simulator-version-min=5.0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.1.sdk -lrobovm-bc -force_load "/Volumes/My Disk/robovm/robovm-0.0.13/lib/vm/ios/x86/librobovm-rt.a" -lrobovm-debug -lrobovm-core -lgc -lpthread -ldl -lm -liconv -lsqlite3 -framework Foundation -framework UIKit
Creating stripped archive file /var/folders/0y/k5k7wl3510d_7p8g6k9mjgc80000gn/T/robovm1960244380699928960.tmp/IOSDemo.app/lib/boot/robovm-rt.jar
Creating stripped archive file /var/folders/0y/k5k7wl3510d_7p8g6k9mjgc80000gn/T/robovm1960244380699928960.tmp/IOSDemo.app/lib/robovm-objc.jar
Creating stripped archive file /var/folders/0y/k5k7wl3510d_7p8g6k9mjgc80000gn/T/robovm1960244380699928960.tmp/IOSDemo.app/lib/robovm-cocoatouch.jar
Creating stripped archive file /var/folders/0y/k5k7wl3510d_7p8g6k9mjgc80000gn/T/robovm1960244380699928960.tmp/IOSDemo.app/lib/classes2.jar
Installing Info.plist to /var/folders/0y/k5k7wl3510d_7p8g6k9mjgc80000gn/T/robovm1960244380699928960.tmp/IOSDemo.app
xcrun dsymutil -o /var/folders/0y/k5k7wl3510d_7p8g6k9mjgc80000gn/T/robovm1960244380699928960.tmp/IOSDemo.app.dSYM /var/folders/0y/k5k7wl3510d_7p8g6k9mjgc80000gn/T/robovm1960244380699928960.tmp/IOSDemo.app/IOSDemo
warning: no debug symbols in executable (-arch i386)
"/Volumes/My Disk/robovm/robovm-0.0.13/bin/ios-sim" launch /var/folders/0y/k5k7wl3510d_7p8g6k9mjgc80000gn/T/robovm1960244380699928960.tmp/IOSDemo.app --timeout 90 --unbuffered --family iphone --retina --tall --args -rvm:log=warn
2014-06-01 07:14:25.820 IOSDemo[324:70b] Application windows are expected to have a root view controller at the end of application launch

Насколько я вижу, нет никаких ошибок или предупреждений, кроме ошибки от симулятора iOS (и строки об отладочных символах).

Я использую:
- Mac OSX 10.9
- RoboVM 0.0.13
- Javac 1.7.0_60 (также пробовал 1.8.0_05)
- XCode 5.1.1 (5B1008)
- (Симулятор : iOS 7.1 (11D167))

Я никогда раньше не использовал Mac, никогда раньше не использовал XCode и еще не знаю Objective-C, поэтому я не уверен, как это решить. Поиск ошибки в Google, кажется, предполагает, что мне нужно где-то добавить строку кода, но я еще не уверен, как преобразовать ее в RoboVM, и, поскольку это пример кода, скопированного/вставленного с веб-сайта, я думаю, что он должен работать из коробки без доработок (верно?). Так что, вероятно, что-то еще не так. Надеюсь, некоторые из вас видят, что не так. Любая помощь будет оценена по достоинству. Спасибо :)


EDIT: работает из eclipse, но не из командной строки. Ошибка, о которой я упоминал выше, также отображается в eclipse (см. изображение ниже), но, поскольку она все равно работает, эта ошибка, вероятно, не является причиной проблемы. Может быть, симулятор iOS как-то неправильно запускается, когда я делаю это из командной строки?

Ширина


person Bjarke    schedule 01.06.2014    source источник
comment
Вместо этого попробуйте следовать разделу Eclipse на странице "Начало работы" и посмотрите, будет ли это работать лучше.   -  person ntherning    schedule 04.06.2014
comment
Я только что попробовал это из eclipse, как вы предложили, и я получаю ту же ошибку. НО это все равно работает в симуляторе iOS! (Я вижу текст Click #x, где x увеличивается каждый раз, когда я нажимаю). Так может быть, это просто запуск симулятора из командной строки, что я делаю неправильно? (А может быть, ошибка о корневом контроллере представления действительно является предупреждением?)   -  person Bjarke    schedule 10.06.2014


Ответы (2)


Пример, который есть на сайте robovm, — это очень простая демонстрация возможностей robovm, а не передовой опыт.

Что-то вроде этого может быть немного «лучше» (не проверено):

Основное приложение:

public class MainApplication extends UIApplicationDelegateAdapter {

UIViewController myViewController;


@Override
public boolean didFinishLaunching(UIApplication application,
                                  NSDictionary launchOptions) {

    if (myViewController == null) {
        myViewController = new MyViewController();
    }

    UINavigationController navigationController = new UINavigationController();
    navigationController.pushViewController(myViewController, true);

    CGRect bounds = new CGRect(0, 0, UIScreen.getMainScreen().getCurrentMode().getSize().width(),
            UIScreen.getMainScreen().getCurrentMode().getSize().height());


    UIWindow window = new UIWindow(bounds);
    window.setBackgroundColor(UIColor.colorWhite());
    window.makeKeyAndVisible();

    /* show everything */
    window.setRootViewController(navigationController);
    window.makeKeyAndVisible();

    return true;
}


/* Main entry point */
public static void main(String[] args) {
    NSAutoreleasePool pool = new NSAutoreleasePool();
    UIApplication.main(args, null, MainApplication.class);
    pool.close();
}
}

Мой контроллер навигации:

public class MyViewController extends UIViewController {


@Override
public void viewDidLoad() {

    final UIButton button = UIButton.create(UIButtonType.RoundedRect);
    button.setFrame(new CGRect(115.0f, 121.0f, 91.0f, 37.0f));
    button.setTitle("Click me!", UIControlState.Normal);

    button.addOnTouchUpInsideListener(new UIControl.OnTouchUpInsideListener() {
        @Override
        public void onTouchUpInside(UIControl control, UIEvent event) {
            button.setTitle("Click #" + (++clickCount), UIControlState.Normal);
        }
    });
   getView().addSubview(button );
}
}
person AshleyJ    schedule 31.08.2014
comment
Спасибо за ваш ответ. Это не помогло мне решить мою проблему с командной строкой, но то, как я сформулировал свой вопрос (сделав ошибочную связь между сообщением об ошибке и тем, что оно не работает из командной строки), я думаю, это действительно отвечает на мой вопрос. Если у меня все еще будут проблемы с компиляцией из командной строки в следующий раз, когда я окажусь рядом с Mac, я открою для этого новый вопрос :) Еще раз спасибо! - person Bjarke; 18.09.2014

У меня было такое же сообщение об ошибке, зарегистрированное в Eclipse, но симулятор запустился правильно и все равно работал.

person Jonathan Crosmer    schedule 02.07.2014