1

これは面白い。私はユニバーサルアプリを持っています。iPhone と iPad のバージョンはどちらも同じクラスを共有し、異なる xib ファイルを持っているだけです。iPad のバージョンを更新した後、実行できなくなり、単にクラッシュするという報告が頻繁に寄せられています。ただし、iPhone バージョンへのアップデートは問題なく機能します。iPad アプリを削除し、再起動して再インストールすると、起動時のクラッシュの問題が修正されます。

影響を受けるコードで更新:

わかりましたので、影響を受けるコード行を再記号化して表示した後、問題を引き起こしていると思われるすべての領域を以下に示します。

アプリが初めて質問をするようにしたかったので、アプリが初めて実行されたときだけ、AppDelegate didFinishLaunchingWithOptions で私は持っています:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if (! [defaults boolForKey:@"notFirstRun"]) {
    UIAlertView *firstrun = [[UIAlertView alloc] initWithTitle:@"Sermon Preference" message:@"Do you prefer audio only, or video sermons?  (This setting can be changed at any time in the Settings Page.)" delegate:self cancelButtonTitle:nil otherButtonTitles:@"Audio", @"Video", nil];
        [firstrun show];
        [firstrun release];
    [defaults setBool:YES forKey:@"notFirstRun"];
}

それから私はまだ AppDelegate に持っています:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
        if (buttonIndex == 0)       {   
            NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
            NSString *nope = @"Audio";
            [defaults setObject:nope forKey:@"videosermons"];
            [defaults synchronize];


        }
        if (buttonIndex == 1)        {
            NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
            NSString *yup = @"Video";
            [defaults setObject:yup forKey:@"videosermons"];
            [defaults synchronize];        }

        }

これらの値を設定ウィンドウで変更したかったので、設定クラスで次のようにしました。

- (void)viewDidLoad
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];


        NSString *currently = [defaults objectForKey:@"videosermons"];

    if ([currently isEqualToString:@"Audio"]) {
        segment.selectedSegmentIndex = 0;
    }
    if ([currently isEqualToString:@"Video"]) {
        segment.selectedSegmentIndex = 1;
    }


    NSString *firstName = [defaults objectForKey:@"firstName"];
    if (firstName  == nil) {

    }
    else {
        myTextField.text = firstName;
    }
    NSURL *url = [NSURL URLWithString:@"http://www.bellavenue.org/worship.html"];
    self.content = [NSString stringWithContentsOfURL:url];
    [super viewDidLoad];
}

クラッシュログがクラッシュを引き起こしていると言う行は次のとおりです。

    if ([currently isEqualToString:@"Audio"]) {

新しいインストールではなく、既にインストールされている以前のバージョンを更新する場合にのみ、iPad でのみクラッシュを引き起こす原因は何ですか?

クラッシュログを更新:

Incident Identifier: EE5B1A62-12DB-4ED5-95CD-0C68CE1614BA
CrashReporter Key:   92fbea1d35e30ff292ba7362f93548dceedefe66
Hardware Model:      iPad2,5
Process:         Bell Avenue [1013]
Path:            /var/mobile/Applications/CE1AE921-5767-4B3C-B223-2C098041C73E/Bell Avenue.app/Bell Avenue
Identifier:      Bell Avenue
Version:         ??? (???)
Code Type:       ARM (Native)
Parent Process:  launchd [1]

Date/Time:       2012-12-01 14:11:10.653 -0600
OS Version:      iOS 6.1 (10B5105c)
Report Version:  104

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Crashed Thread:  0

Last Exception Backtrace:
0   CoreFoundation                  0x3411529e 0x34053000 + 795294
1   libobjc.A.dylib                 0x33f3297a 0x33f2a000 + 35194
2   CoreFoundation                  0x34118e02 0x34053000 + 810498
3   CoreFoundation                  0x3411752c 0x34053000 + 804140
4   CoreFoundation                  0x3406ef64 0x34053000 + 114532
5   Bell Avenue                     0x0008652e -[Settings viewDidLoad] (Settings.m:64)
6   UIKit                           0x3396578c 0x337c5000 + 1705868
7   UIKit                           0x3396d5fa 0x337c5000 + 1738234
8   UIKit                           0x3399786a 0x337c5000 + 1910890
9   UIKit                           0x33820ae4 0x337c5000 + 375524
10  UIKit                           0x337c8f7c 0x337c5000 + 16252
11  UIKit                           0x337c8a10 0x337c5000 + 14864
12  UIKit                           0x337c845e 0x337c5000 + 13406
13  GraphicsServices                0x3afaf59e 0x3afa9000 + 26014
14  GraphicsServices                0x3afaf1ce 0x3afa9000 + 25038
15  CoreFoundation                  0x340ea16e 0x34053000 + 618862
16  CoreFoundation                  0x340ea112 0x34053000 + 618770
17  CoreFoundation                  0x340e8f94 0x34053000 + 614292
18  CoreFoundation                  0x3405beb8 0x34053000 + 36536
19  CoreFoundation                  0x3405bd44 0x34053000 + 36164
20  UIKit                           0x3381f7c8 0x337c5000 + 370632
21  UIKit                           0x3381c644 0x337c5000 + 357956
22  Bell Avenue                     0x000832fe main (main.m:13)
23  libdyld.dylib                   0x39d7ab1c 0x39d79000 + 6940


Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libsystem_kernel.dylib          0x385b6350 0x385a5000 + 70480
1   libsystem_c.dylib               0x3a64d11e 0x3a61e000 + 192798
2   libsystem_c.dylib               0x3a68996e 0x3a61e000 + 440686
3   libc++abi.dylib                 0x33e1cd4a 0x33e19000 + 15690
4   libc++abi.dylib                 0x33e19ff4 0x33e19000 + 4084
5   libobjc.A.dylib                 0x33f32a74 0x33f2a000 + 35444
6   libc++abi.dylib                 0x33e1a078 0x33e19000 + 4216
7   libc++abi.dylib                 0x33e1a110 0x33e19000 + 4368
8   libc++abi.dylib                 0x33e1b594 0x33e19000 + 9620
9   libobjc.A.dylib                 0x33f329cc 0x33f2a000 + 35276
10  CoreFoundation                  0x3405bf1c 0x34053000 + 36636
11  CoreFoundation                  0x3405bd44 0x34053000 + 36164
12  UIKit                           0x3381f7c8 0x337c5000 + 370632
13  UIKit                           0x3381c644 0x337c5000 + 357956
14  Bell Avenue                     0x000832fe main (main.m:13)
15  libdyld.dylib                   0x39d7ab1c 0x39d79000 + 6940

Thread 1:
0   libsystem_kernel.dylib          0x385b6d98 0x385a5000 + 73112
1   libsystem_c.dylib               0x3a624cf6 0x3a61e000 + 27894
2   libsystem_c.dylib               0x3a624a12 0x3a61e000 + 27154
3   libsystem_c.dylib               0x3a6248a0 0x3a61e000 + 26784

Thread 2 name:  Dispatch queue: com.apple.libdispatch-manager
Thread 2:
0   libsystem_kernel.dylib          0x385a6648 0x385a5000 + 5704
1   libdispatch.dylib               0x3aee2974 0x3aeda000 + 35188
2   libdispatch.dylib               0x3aee2654 0x3aeda000 + 34388

Thread 3:
0   libsystem_kernel.dylib          0x385b6d98 0x385a5000 + 73112
1   libsystem_c.dylib               0x3a624cf6 0x3a61e000 + 27894
2   libsystem_c.dylib               0x3a624a12 0x3a61e000 + 27154
3   libsystem_c.dylib               0x3a6248a0 0x3a61e000 + 26784

Thread 4 name:  WebThread
Thread 4:
0   libsystem_kernel.dylib          0x385b60fc 0x385a5000 + 69884
1   libsystem_c.dylib               0x3a61f124 0x3a61e000 + 4388
2   WebCore                         0x38db41c0 0x38da8000 + 49600
3   WebCore                         0x38db40f2 0x38da8000 + 49394
4   CoreFoundation                  0x340ea6ca 0x34053000 + 620234
5   CoreFoundation                  0x340e89bc 0x34053000 + 612796
6   CoreFoundation                  0x340e8de8 0x34053000 + 613864
7   CoreFoundation                  0x3405beb8 0x34053000 + 36536
8   CoreFoundation                  0x3405bd44 0x34053000 + 36164
9   WebCore                         0x38db22a8 0x38da8000 + 41640
10  libsystem_c.dylib               0x3a62f30e 0x3a61e000 + 70414
11  libsystem_c.dylib               0x3a62f1d4 0x3a61e000 + 70100
4

1 に答える 1

0

システムによりアプリが中止されました(SIGABRT)。コードにはいくつかの問題があります。

  1. のすべてのコードは、viewDidLoad実際にはで実行する必要がありますviewWillAppear:。ビューがiOSによってロードされるときに実行されるコードはありません。
  2. self.content = [NSString stringWithContentsOfURL:url]は同期呼び出しであり、これにかかる時間の間、メインスレッドをブロックします。これを非同期的に呼び出すか、NSOperationQueueを使用してコンテンツをロードしてから、メインスレッドに再度設定する必要があります。現在、これはView Controllerのロードプロセスをブロックしますが、これはさらに悪い考えです。
  3. 例外メッセージは表示されませんが、currentlyオブジェクトがタイプNSStringではなく、unrecognized selector sent to instanceエラーが発生したと思われます。

クラッシュレポートの読み方と操作方法については、次のシリーズをお読みください:http ://www.raywenderlich.com/10209/my-app-crashed-now-what-part-1

于 2012-12-02T00:01:10.517 に答える