Вопрос

Я создаю проект, в котором мне нужно изменить файл main.m, чтобы UIApplication не появлялся сразу, поэтому я удалил следующую строку из 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 нет UIApplication?

Это было полезно?

Решение

Если вы хотите запустить приложение из демона, используйте 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

Другие советы

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

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

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

Почему вы пытаетесь открыть окно с помощью демона?Это кажется очень плохой идеей, и, как вы заметили, ее трудно реализовать.

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top