【问题标题】:IOS 10 core data executeFetchRequest crashes if called before insertNewObjectForEntityForName如果在 insertNewObjectForEntityForName 之前调用 IOS 10 核心数据 executeFetchRequest 崩溃
【发布时间】:2017-01-28 03:38:54
【问题描述】:

我对一个在 iOS

将手机更新到 iOS 10 后,我的应用在执行 executeFetchRequest 之前 insertNewObjectForEntityForName 时崩溃。

似乎主要是 iPhone6 及更高版本有问题(被告知 iPhone5 没问题)。

下面代码的这一行崩溃了:

NSArray *results = [context executeFetchRequest:fetchRequest error:&error];

xcode error picture 这些方法让我在“Scada”类中头疼:

+(Scada *)getFirstScada {
    NSError *error = nil;
    NSArray *results = [context executeFetchRequest:fetchRequest error:&error];   //Crashing here

    Scada *retVal = nil;

    //maybe some check before, to be sure results is not empty
    if ([results count] == 0) {
        retVal = nil;
    } else {
        retVal = [results firstObject];
    }

    return retVal;
}

+ (int)insertNewScada:(NSString *)scadaName HostName:(NSString *)scadaHostName {
    int returnValue = 0;

    Scada *newScada = [NSEntityDescription insertNewObjectForEntityForName:NSStringFromClass([Scada class]) inManagedObjectContext:context];

    //Configure the new scada object.
    [newScada setName:scadaName];
    [newScada setHostname:[scadaHostName uppercaseString]];

    // Save the context.
    NSError *error = nil;
    if (![context save:&error]) {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        returnValue = -1;
    } else {
        returnValue = 1;
    }

    return returnValue;
}

我今天的电话在AppDelegate是这样的:

不起作用:

Scada *scada = [Scada getFirstScada];

作品:

[Scada insertNewScada:@"tmp" HostName:@"T.E.M.P/DELETE"];
[Scada removeScada:@"T.E.M.P/DELETE"];

Scada *scada = [Scada getFirstScada];

崩溃日志(不是全部):

崩溃的线程:0 调度队列:com.apple.main-thread

异常类型:EXC_BAD_ACCESS (SIGSEGV) 异常代码:
EXC_I386_GPFLT 异常说明:EXC_CORPSE_NOTIFY

应用程序特定信息:objc_msgSend() 选择器名称: fetchLimit CoreSimulator 303.8 - 设备:iPhone 6s - 运行时:iOS 10.0 (14A345) - 设备类型:iPhone 6s

线程 0 崩溃::调度队列:com.apple.main-thread 0
libobjc.A.dylib 0x000000010e19facb objc_msgSend + 11 1 com.novotek.SmartDirect 0x000000010b1d113a +[Scada getFirstScada] + 74 (Scada.m:120) 2 com.novotek.SmartDirect
0x000000010b1f21fd -[AppDelegate 应用程序:didFinishLaunchingWithOptions:] + 109 (AppDelegate.m:36) 3 com.apple.UIKit 0x000000010c3f968e -[UIApplication _handleDelegateCallbacksWithOptions:isSuspended:restoreState:] + 290 4 com.apple.UIKit 0x000000010c3fb013 -[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + 4236 5 com.apple.UIKit 0x000000010c4013b9 -[UIApplication _runWithMainScene:transitionContext:completion:] + 1731 6 com.apple.UIKit 0x000000010c3fe539 -[UIApplication workspaceDidEndTransaction:] + 188 7 com.apple.FrontBoardServices 0x000000010feef76b FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK + 24 8 com.apple.FrontBoardServices 0x000000010feef5e4 -[FBSSerialQueue _performNext] + 189 9 com.apple.FrontBoardServices 0x000000010feef96d -[FBSSerialQueue _performNextFromRunLoopSource] + 45 10 com.apple.CoreFoundation 0x000000010e6cd311 CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION + 17 11 com.apple.CoreFoundation 0x000000010e6b259c __CFRunLoopDoSources0 + 556 12 com.apple.CoreFoundation 0x000000010e6b1a86 __CFRunLoopRun + 918 13 com.apple.CoreFoundation 0x000000010e6b1494 CFRunLoopRunSpecific + 420 14 com.apple.UIKit
0x000000010c3fcdb6 -[UIApplication_run] + 434 15 com.apple.UIKit
0x000000010c402f34 UIApplicationMain + 159 16 com.novotek.SmartDirect 0x000000010b1e6d7f 主要 + 111 (main.m:16) 17 libdyld.dylib 0x000000010f55b68d 开始 + 1

线程 1:0 libsystem_kernel.dylib 0x000000010f8875e2 __workq_kernreturn + 10 1 libsystem_pthread.dylib 0x000000010f99b578 _pthread_wqthread + 1283 2
libsystem_pthread.dylib 0x000000010f999341 start_wqthread + 13

线程 2:: 调度队列:com.apple.libdispatch-manager 0
libsystem_kernel.dylib 0x000000010f887efa kevent_qos + 10 1
libdispatch.dylib 0x000000010f506c3b _dispatch_mgr_wait_for_event + 79 2 libdispatch.dylib 0x000000010f500a85 _dispatch_mgr_invoke + 248 3 libdispatch.dylib
0x000000010f500887 _dispatch_mgr_thread + 54

线程 3:0 libsystem_pthread.dylib 0x000000010f999334 start_wqthread + 0

线程 4:0 libsystem_kernel.dylib 0x000000010f8875e2 __workq_kernreturn + 10 1 libsystem_pthread.dylib 0x000000010f99b578 _pthread_wqthread + 1283 2
libsystem_pthread.dylib 0x000000010f999341 start_wqthread + 13

线程 5:: com.apple.uikit.eventfetch-线程 0
libsystem_kernel.dylib 0x000000010f880f72 mach_msg_trap + 10 1 libsystem_kernel.dylib 0x000000010f8803b3 mach_msg + 55 2
com.apple.CoreFoundation 0x000000010e6b27b4 CFRunLoopServiceMachPort + 212 3 com.apple.CoreFoundation 0x000000010e6b1c31 __CFRunLoopRun + 1345 4 com.apple.CoreFoundation 0x000000010e6b1494 CFRunLoopRunSpecific + 420 5
com.apple.Foundation 0x000000010dc6c080 -[NSRunLoop(NSRunLoop) 运行模式:beforeDate:] + 274 6 com.apple.Foundation 0x000000010dcf3a21 -[NSRunLoop(NSRunLoop) runUntilDate:] + 78 7 com.apple.UIKit 0x000000010ce8896d -[UIEventFetcher threadMain] + 118 8
com.apple.Foundation 0x000000010dc7bf74 __NSThread__start
+ 1243 9 libsystem_pthread.dylib 0x000000010f99b99d _pthread_body + 131 10 libsystem_pthread.dylib 0x000000010f99b91a _pthread_start + 168 11 libsystem_pthread.dylib
0x000000010f999351 thread_start + 13

线程 0 因 X86 线程状态(64 位)而崩溃:rax: 0x0000000000000000 rbx:0x0000000000000000 rcx:0x000000010dff6170 rdx: 0x0000000000000004 rdi: 0x00006000000cf5e0 rsi: 0x000000010c223983 rbp:0x00007fff54a2e280 rsp:0x00007fff54a2dbf8
r8:0x0000000000000070 r9:0x00006000000cf5e0 r10: 0xbadd7088dd4fbead r11:0x000000010c223983 r12:0x00006000001ddc40 r13:0x00006000000cf5e0 r14:0x000060000005f710 r15: 0x5e0081f7ad0372c5 翻录:0x000000010e19facb rfl:0x0000000000010202 cr2: 0x000000010bfd9e18 逻辑 CPU: 0 错误代码:
0x00000000 陷阱编号:13

二进制图像: 0x10b1cf000 - 0x10b200fff +com.novotek.SmartDirect (2.1.0 - 160906) /Users/USER/Library/Developer/CoreSimulator/Devices/34113BFD-BEE2-4BEF-B77E-0A7DD14B2C55/data/Containers/Bundle/Application/34D88A3E-8915-4552-AAEC-5F4D2F415983/SmartDirect.app/SmartDirect 0x10b237000 - 0x10b25f707 +dyld_sim (360.22) /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib/dyld_sim 0x10b2a8000 - 0x10b333fff com.apple.Security (10.0 - ???) /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Frameworks/Security.framework/Security 0x10b39c000 - 0x10b746fff com.apple.audio.toolbox.AudioToolbox (1.8 - 1.8) /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Frameworks/AudioToolbox.framework/AudioToolbox 0x10b8ae000 - 0x10bee1fff com.apple.CoreGraphics (2.0 - 1070) /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Frameworks/CoreGraphics.framework/CoreGraphics 0x10bfbe000 - 0x10c295ff7 +CoreData (752.1) /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Frameworks/CoreData.framework/CoreData 0x10c3db000 - 0x10d282ff7 com.apple.UIKit (1.0 - 1000) /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Frameworks/UIKit.framework/UIKit 0x10dc4b000 - 0x10df31ff3 com.apple.Foundation (6.9 - 1349) /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Frameworks/Foundation.framework/Foundation 0x10e184000 - 0x10e552eaf +libobjc.A.dylib (706) /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib/libobjc.A.dylib

【问题讨论】:

  • 请包含崩溃日志,如果可以,请在应用程序中添加异常断点并告诉我们崩溃所在的代码行。
  • 添加了发生崩溃的行,并添加了日志信息。
  • 不是崩溃日志。
  • fetchRequest 包含什么?上下文是否显示为零?
  • 上下文不为nil,fetchRequest包含: (entity: Scada; predicate: ((null)); sortDescriptors: ((null)); type: NSManagedObjectResultType; )

标签: ios core-data


【解决方案1】:

感谢您的帮助。

这似乎是一个静态方法,被调用了两次,重新初始化了一个变量。

在查找崩溃日志时找到了解决方案,并在 xcode 中偶然发现了 Zombie...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-09
    • 2017-07-20
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 2014-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多