Добавление UIWindow в xcode iPhone SDK - PullRequest
0 голосов
/ 06 января 2010

Я создаю проект, в котором мне нужно изменить файл main.m, чтобы приложение UIA не появлялось сразу, поэтому я удалил следующую строку из main.m

int retVal = UIApplicationMain(argc, argv, nil, nil);

и удалил эти строки из AppDelegate

- (void)applicationDidFinishLaunching:(UIApplication *)application {    

    // Override point for customization after application launch
    [window makeKeyAndVisible];
}

И я добавил несколько своих строк. Теперь UIWindow не отображается по умолчанию, и это правильно. Но теперь, после того, как мой код выполнен, я хочу создать окно и отобразить некоторое сообщение.

Как создать окно UIWindow, когда в main.m нет приложения UIA?

Ответы [ 4 ]

4 голосов
/ 07 января 2010

Если вы хотите запустить приложение из демона, используйте SBSLaunchApplicationWithIdentifier.

BOOL SBSLaunchApplicationWithIdentifier(NSString* identifier,
                                        BOOL      please_pass_NO_here);

Если вы хотите запустить URL, используйте -[UIApplication openURL:] или нижний уровень GSEventSendApplicationOpenURL.

mach_port_t GSGetPurpleSystemEventPort();
void GSEventSendApplicationOpenURL(CFURLRef url, mach_port_t port);

Если вы просто хотите отобразить предупреждение, используйте CFUserNotification. (Да, это работает на iPhoneOS.)

http://developer.apple.com/mac/library/documentation/CoreFoundation/Reference/CFUserNotificationRef/Reference/reference.html

1 голос
/ 06 января 2010

Скорее всего, не запуск UIKit - это не решение, которое вы ищете. Попробуйте просто не показывать какой-либо пользовательский интерфейс (не возвращайтесь с applicationDidFinishLaunching:) и делайте то, что вам нужно, там (или в том, что называется из этого). Или вы можете просто показать хороший экран загрузки с UIActivityIndicatorView.

Также обратите внимание, что если ваше приложение не запустилось полностью в течение 20 секунд после запуска (показывая какой-то интерфейс и реагируя на события), SpringBoard или ОС автоматически закроют ваше приложение. Кроме того, пользователи не любят ждать:).

Редактировать: Поскольку вы не создаете приложение UIKit, перестаньте мечтать о возможности запустить UIKit посередине: вы не можете. Для этого требуется отдельная перехват компонента SpringBoard.

0 голосов
/ 28 января 2010

Я добился того, что пытался сделать, благодаря KennyTM за его замечательные советы.

Это то, что я сделал

1) я создал свое приложение, в котором я сделал все для своего приложения, а затем записал все эти настройки в текстовый файл и заставил мое приложение создать и поместить этот текстовый файл в /private/var/mobile/SomeFile.txt (Это место, где, будучи мобильным пользователем, ваше приложение может писать, не связываясь с разрешениями)

2) Затем я создал другое приложение в xcode, (Window Based), удалил файлы делегатов (h / m) и написал свою собственную основную функцию, в которой я читаю из файла, созданного моим другим приложением, и записываю в 1-й step (/private/var/mobile/SomeFile.txt).

3) Я создал plist (Вы можете найти помощь по созданию LaunchDaemon здесь http://www.tuaw.com/2008/02/21/tuaw-responds-iphone-lojack/)

4) Я создал этот список для чтения моего приложения на шаге 2 каждые 60 секунд (1 мин), и если условие выполнено, приложение на втором шаге отобразит предупреждение с использованием CFUserNotificationDisplayAlert (спасибо KennyTM за его руководство).

Единственная проблема, с которой я сталкиваюсь в настоящее время, заключается в том, что мне нужно поместить этот launchDaemon в каталог / Library / LaunchDaemons вручную, но SSH, используя root, поскольку я не могу / мое приложение не может записать в этот каталог.

0 голосов
/ 06 января 2010

ПОЧЕМУ вы пытаетесь открыть окно от демона? Это кажется очень плохой идеей, и, как вы заметили, на самом деле это трудно сделать.

Вместо этого создайте приложение, которое будет делать то, что вы хотите, и запустите его из демона, когда вы хотите показать окно - либо с помощью обработки URL-адреса, либо с помощью других средств. Но в основном это приложение и ваш демон могут обмениваться информацией, как только оно запущено и работает, и оно может выполнять всю работу с пользовательским интерфейсом вне домена демона.

...