2

サンプル アプリでは、main.m ファイルでそのシグナルを無視したにもかかわらず、SIGPIPE エラーが表示されます。

#import <UIKit/UIKit.h>

#import "AppDelegate.h"

int main(int argc, char *argv[])
{
    @autoreleasepool {
        signal(SIGPIPE, SIG_IGN);
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

gdbのバックトレースは

 #0  0x38579eb4 in mach_msg_trap ()
 #1  0x3857a04c in mach_msg ()
 #2  0x3605b044 in __CFRunLoopServiceMachPort ()
 #3  0x36059d5e in __CFRunLoopRun ()
 #4  0x35fccebc in CFRunLoopRunSpecific ()
 #5  0x35fccd48 in CFRunLoopRunInMode ()
 #6  0x328cf2ea in GSEventRunModal ()
 #7  0x32939300 in UIApplicationMain ()
 #8  0x000b6c52 in main (argc=1, argv=0x2fd4bc40) at   /Users/bdsu/Desktop/Git_repo/VoipApp_iOS/VoipApp_iOS/main.m:17

スタンバイ モードに戻ってから戻ると、このエラーが発生します。IOS 6.0 を使用して IPAD でテストしました。Xcode のバージョンは 4.5/5.0 です。

4

1 に答える 1

2

私のアプリは、バックグラウンドでインターネット接続が必要でした。ただし、すべてのアプリがバックグラウンドで実行する許可を得るわけではありません。アプリのバックグラウンド モードを voip app に設定する必要があります。また、バックグラウンドで実行できるようにする他のオプションも利用できます。また、デフォルトでは、IOS はバックグラウンドで 10 分後にすべてのアプリを一時停止し、ソケットが閉じられていたため、sigpipeエラーが発生していました。そのため、アプリがバックグラウンドになったときに呼び出され、アプリを維持する関数を作成しました。そうすれば、アプリはバックグラウンドで実行されているときにインターネット接続を取得し、sigpipe.

于 2014-05-28T02:26:33.217 に答える