0

UIApplicationがすぐに表示されないように、main.mファイルを変更する必要があるプロジェクトを作成しているため、main.mから​​次の行を削除しました

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

これらの行を AppDelegate から削除しました

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

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

そして、私は私のいくつかの行を追加しました。現在、UIWindow はデフォルトでは表示されません。しかし、私のコードが実行された後、ウィンドウを作成してメッセージを表示したいと思います。

main.mにUIApplicationがない場合にUIWindowを作成するには?

4

4 に答える 4

4

デーモンからアプリを起動する場合は、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

于 2010-01-07T15:42:03.887 に答える
1

ほとんどの場合、UIKit を開始しないことは、探している解決策ではありません。UI をまったく表示しないようにして (から戻らないでくださいapplicationDidFinishLaunching:)、必要なことをそこで (またはそこから呼び出されたもので) 行ってください。または、UIActivityIndicatorView.

また、アプリケーションが起動から 20 秒以内に完全に起動しない場合 (何らかの UI を表示し、イベントに応答する)、SpringBoard または OS がアプリケーションを自動的に終了することに注意してください。さらに、ユーザーは待つのが好きではありません:)。

編集: UIKit アプリを作成していないので、途中で UIKit を起動できると夢見るのはやめてください: できません。これを実現するには、SpringBoard をフックする別のコンポーネントが必要です。

于 2010-01-06T04:02:42.747 に答える
0

KennyTM の素晴らしいアドバイスに感謝します。

これは私がしたことです

1)アプリを作成し、アプリのすべての設定を行い、それらすべての設定をテキストファイルに書き込み、アプリにそのtxtファイルを作成させて/private/var/mobile/SomeFile.txtに配置しました(これはモバイル ユーザーとして、アプリがアクセス許可をいじらずに書き込むことができる場所)

2)次に、xcode(ウィンドウベース)で別のアプリを作成し、デリゲート(h/m)ファイルを削除し、独自のメイン関数を作成しました。この関数では、他のアプリが作成して最初のステップで書き込んだファイルから読み取ります(/ private/var/mobile/SomeFile.txt)。

3) plist を作成しました (LaunchDaemon の作成に関するヘルプは、http: //www.tuaw.com/2008/02/21/tuaw-responds-iphone-lojack/ にあります) 。

4) ステップ 2 で 60 秒 (1 分) ごとにアプリを読み取るようにその plist を作成しました。条件が true の場合、2 番目のステップのアプリは CFUserNotificationDisplayAlert を使用してアラートを表示します (KennyTM のガイダンスに感謝します)。

私が現在抱えている唯一の問題は、その launchDaemon を /Library/LaunchDaemons ディレクトリに手動で配置する必要があることですが、root を使用して SSH を実行する必要があります。これは、アプリがそのディレクトリに書き込めないためです。

于 2010-01-28T06:40:14.170 に答える
0

デーモンからウィンドウを開こうとしているのはなぜですか? それは非常に悪い考えのように思えますが、実際に行うのは難しいことに注意してください。

代わりに、やりたいことを実行するアプリを作成し、ウィンドウを表示したいときに、URL 処理またはその他の手段を介してデーモンから起動します。しかし、基本的には、そのアプリとデーモンは、起動して実行すると通信でき、デーモンのドメインから離れてすべての UI を実行できます。

于 2010-01-06T06:21:03.060 に答える