4

我们刚刚使用 xcode 4.5.2 发布了一个新的 iPhone 应用程序,cordova-2.2.0 测试时一切正常。但是今天发布后它立即崩溃。开始屏幕闪烁一秒钟,然后崩溃。

崩溃:-iPhone 5 (iOs 6.0.1) -iPhone 4s (iOs 6.0.1) -iPhone 4 (iOs 6.0.1)

但!适用于:-iPhone 4 (iOs 5.0) ?!?

因为从 xcode 开始时它正在工作,所以我们无法重现此错误,有什么想法吗?

这是崩溃日志的片段,您需要更多详细信息吗?

谢谢!

Last Exception Backtrace:
0   CoreFoundation                  0x39e0b3e2 __exceptionPreprocess + 158
1   libobjc.A.dylib                 0x38e6495e objc_exception_throw + 26
2   CoreFoundation                  0x39e0ef2c -[NSObject(NSObject) doesNotRecognizeSelector:] + 180
3   CoreFoundation                  0x39e0d648 ___forwarding___ + 388
4   CoreFoundation                  0x39d65204 _CF_forwarding_prep_0 + 20
5   myapp                       0x0003dff4 -[CDVViewController viewDidLoad] + 1352
6   myapp                       0x000114dc -[MainViewController viewDidLoad] (MainViewController.m:62)
7   UIKit                           0x3363a544 -[UIViewController loadViewIfRequired] + 360
8   UIKit                           0x3367ad2c -[UIWindow addRootViewControllerViewIfPossible] + 60
9   UIKit                           0x33676ac8 -[UIWindow _setHidden:forced:] + 360
10  UIKit                           0x336b819c -[UIWindow makeKeyAndVisible] + 56
11  myapp                       0x00011260 -[AppDelegate application:didFinishLaunchingWithOptions:] (AppDelegate.m:108)
12  UIKit                           0x3367ba74 -[UIApplication _handleDelegateCallbacksWithOptions:isSuspended:restoreState:] + 248
13  UIKit                           0x3367b5f8 -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1164
14  UIKit                           0x33673806 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 694
15  UIKit                           0x3361bcea -[UIApplication handleEvent:withNewEvent:] + 1006
16  UIKit                           0x3361b778 -[UIApplication sendEvent:] + 68
17  UIKit                           0x3361b1ba _UIApplicationHandleEvent + 6194
18  GraphicsServices                0x39eaf5f2 _PurpleEventCallback + 586
19  CoreFoundation                  0x39de08f2 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 10
20  CoreFoundation                  0x39de0158 __CFRunLoopDoSources0 + 208
21  CoreFoundation                  0x39ddef2a __CFRunLoopRun + 642
22  CoreFoundation                  0x39d52238 CFRunLoopRunSpecific + 352
23  CoreFoundation                  0x39d520c4 CFRunLoopRunInMode + 100
24  UIKit                           0x33672440 -[UIApplication _run] + 664
25  UIKit                           0x3366f28c UIApplicationMain + 1116
26  myapp                       0x00010e92 main (main.m:32)
27  myapp                       0x00010e44 start + 36


Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libsystem_kernel.dylib          0x39b75350 __pthread_kill + 8
1   libsystem_c.dylib               0x3310dfb2 pthread_kill + 54
2   libsystem_c.dylib               0x3314a366 abort + 90
3   libc++abi.dylib                 0x33205dda abort_message + 70
4   libc++abi.dylib                 0x33203094 default_terminate() + 20
5   libobjc.A.dylib                 0x38e64a58 _objc_terminate() + 144
6   libc++abi.dylib                 0x33203118 safe_handler_caller(void (*)()) + 76
7   libc++abi.dylib                 0x332031b0 std::terminate() + 16
8   libc++abi.dylib                 0x33204626 __cxa_rethrow + 90
9   libobjc.A.dylib                 0x38e649b0 objc_exception_rethrow + 8
10  CoreFoundation                  0x39d5229c CFRunLoopRunSpecific + 452
11  CoreFoundation                  0x39d520c4 CFRunLoopRunInMode + 100
12  UIKit                           0x33672440 -[UIApplication _run] + 664
13  UIKit                           0x3366f28c UIApplicationMain + 1116
14  myapp                       0x00010e92 main (main.m:32)
15  myapp                       0x00010e44 start + 36

@Antonio 来了 viewDidLoad

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void) viewDidLoad 
{
    [super viewDidLoad];

    NSString* startFilePath = [self pathForResource:self.startPage];
    NSURL* appURL  = nil;
    NSString* loadErr = nil;

    if (startFilePath == nil) {
        loadErr = [NSString stringWithFormat:@"ERROR: Start Page at '%@/%@' was not found.", self.wwwFolderName, self.startPage];
        NSLog(@"%@", loadErr);
        self.loadFromString = YES;
        appURL = nil;
    } else {
        appURL = [NSURL fileURLWithPath:startFilePath];
    }

    //// Fix the iOS 5.1 SECURITY_ERR bug (CB-347), this must be before the webView is instantiated ////

    BOOL backupWebStorage = YES;  // default value
    if ([self.settings objectForKey:@"BackupWebStorage"]) {
        backupWebStorage = [(NSNumber*)[settings objectForKey:@"BackupWebStorage"] boolValue];
    }

    if (backupWebStorage) {
        [CDVLocalStorage __verifyAndFixDatabaseLocations];
    }

    //// Instantiate the WebView ///////////////

    [self createGapView];

    ///////////////////

    NSNumber* enableLocation       = [self.settings objectForKey:@"EnableLocation"];
    NSString* enableViewportScale  = [self.settings objectForKey:@"EnableViewportScale"];
    NSNumber* allowInlineMediaPlayback = [self.settings objectForKey:@"AllowInlineMediaPlayback"];
    BOOL mediaPlaybackRequiresUserAction = YES;  // default value
    if ([self.settings objectForKey:@"MediaPlaybackRequiresUserAction"]) {
        mediaPlaybackRequiresUserAction = [(NSNumber*)[settings objectForKey:@"MediaPlaybackRequiresUserAction"] boolValue];
    }

    self.webView.scalesPageToFit = [enableViewportScale boolValue];

    /*
     * Fire up the GPS Service right away as it takes a moment for data to come back.
     */

    if ([enableLocation boolValue]) {
        [[self.commandDelegate getCommandInstance:@"Geolocation"] getLocation:nil];
    }

    /*
     * Fire up CDVLocalStorage on iOS 5.1 to work-around WebKit storage limitations, or adjust set user defaults on iOS 6.0+
     */
    if (IsAtLeastiOSVersion(@"6.0")) {
        // We don't manually back anything up in 6.0 and so we should remove any old backups.
        [CDVLocalStorage __restoreThenRemoveBackupLocations];
        [[NSUserDefaults standardUserDefaults] setBool:backupWebStorage forKey:@"WebKitStoreWebDataForBackup"];
    } else {
        if (backupWebStorage) {
            [self.commandDelegate registerPlugin:[[CDVLocalStorage alloc] initWithWebView:self.webView] withClassName:NSStringFromClass([CDVLocalStorage class])];
        } else {
            [CDVLocalStorage __restoreThenRemoveBackupLocations];
        }
    }

    /*
     * This is for iOS 4.x, where you can allow inline <video> and <audio>, and also autoplay them
     */
    if ([allowInlineMediaPlayback boolValue] && [self.webView respondsToSelector:@selector(allowsInlineMediaPlayback)]) {
        self.webView.allowsInlineMediaPlayback = YES;
    }
    if (mediaPlaybackRequiresUserAction == NO && [self.webView respondsToSelector:@selector(mediaPlaybackRequiresUserAction)]) {
        self.webView.mediaPlaybackRequiresUserAction = NO;
    }

    // UIWebViewBounce property - defaults to true
    NSNumber* bouncePreference = [self.settings objectForKey:@"UIWebViewBounce"];
    BOOL bounceAllowed = (bouncePreference==nil || [bouncePreference boolValue]); 

    // prevent webView from bouncing
    // based on UIWebViewBounce key in Cordova.plist
    if (!bounceAllowed) {
        if ([ self.webView respondsToSelector:@selector(scrollView) ]) {
            ((UIScrollView *) [self.webView scrollView]).bounces = NO;
        } else {
            for (id subview in self.webView.subviews)
                if ([[subview class] isSubclassOfClass: [UIScrollView class]])
                    ((UIScrollView *)subview).bounces = NO;
        }
    }

    ///////////////////

    if (!loadErr) {
        NSURLRequest *appReq = [NSURLRequest requestWithURL:appURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:20.0];
        [self.webView loadRequest:appReq];
    } else {
        NSString* html = [NSString stringWithFormat:@"<html><body> %@ </body></html>", loadErr];
        [self.webView loadHTMLString:html baseURL:nil];
    }
}
4

2 回答 2

0

确保存档并运行应用程序

当你在调试模式下运行它时,你会得到不同的编译,因此可能会得到不同的结果。(调试模式 = 当您从 XCode 中运行时单击运行)

另外,我感觉您正在使用 iOS 6 中已弃用的方法。(您显然收到“未定义选择器”错误,提示访问您不应该访问的方法)检查​​您使用的方法在 iOS 6 中可用。

此外,请确保您没有访问 ivars。据我所知,iOS 6 禁用了访问私有 ivars。

于 2012-11-30T11:08:03.087 回答
0

似乎您在 viewDidLoad 中调用了 CDVViewController 无法处理的方法。最好检查您在该方法内发送到该类实例的所有消息(很可能是 self.property 或 [self something])。

于 2012-11-30T09:59:29.940 回答