崩溃:在iOS中shortValue何时可以返回nil?
我在我的班上遇到了一个崩溃,方法如下\u PRLog.m-崩溃:在iOS中shortValue何时可以返回nil?,ios,objective-c,crash,short,crash-log,Ios,Objective C,Crash,Short,Crash Log,我在我的班上遇到了一个崩溃,方法如下\u PRLog.m- @property (nonatomic, strong) NSNumber* logID; - (int16_t)logIDValue { NSNumber *result = [self logID]; return [result shortValue]; // ---> ON THIS LINE } logID正在从保存Integer-16类型属性的核心数据中提取 我有下面描述的crashlog- Excep
@property (nonatomic, strong) NSNumber* logID;
- (int16_t)logIDValue
{
NSNumber *result = [self logID];
return [result shortValue]; // ---> ON THIS LINE
}
logID
正在从保存Integer-16类型属性的核心数据中提取
我有下面描述的crashlog-
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Triggered by Thread: 0
Last Exception Backtrace:
0 CoreFoundation 0x18db28300 __exceptionPreprocess + 228 (NSException.m:199)
1 libobjc.A.dylib 0x18d83cc1c objc_exception_throw + 60 (objc-exception.mm:565)
2 CoreFoundation 0x18da26a90 -[NSObject(NSObject) doesNotRecognizeSelector:] + 144 (NSObject.m:144)
3 CoreFoundation 0x18db2ca60 ___forwarding___ + 1328 (NSForwarding.m:3520)
4 CoreFoundation 0x18db2ed60 _CF_forwarding_prep_0 + 96
5 DreamMapper 0x102bb0978 -[_PRLog logIDValue] + 48 (_PRLog.m:47)
6 DreamMapper 0x102c07aec -[PRDevice logForLogID:] + 188 (PRDevice.m:11)
7 DreamMapper 0x102be7c18 __48-[PRDeviceManager createDevice:success:failure:]_block_invoke_3 + 612 (PRDeviceManager.m:113)
8 libdispatch.dylib 0x18d7c6ec4 _dispatch_call_block_and_release + 32 (init.c:1408)
9 libdispatch.dylib 0x18d7c833c _dispatch_client_callout + 20 (object.m:495)
10 libdispatch.dylib 0x18d7d4600 _dispatch_main_queue_callback_4CF + 832 (inline_internal.h:2484)
11 CoreFoundation 0x18daa36b0 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 16 (CFRunLoop.c:1749)
12 CoreFoundation 0x18da9e2c8 __CFRunLoopRun + 1708 (CFRunLoop.c:3069)
13 CoreFoundation 0x18da9d8f4 CFRunLoopRunSpecific + 480 (CFRunLoop.c:3192)
14 GraphicsServices 0x197eb4604 GSEventRunModal + 164 (GSEvent.c:2246)
15 UIKitCore 0x191c71358 UIApplicationMain + 1944 (UIApplication.m:4823)
16 DreamMapper 0x102c13690 main + 88 (main.m:8)
17 libdyld.dylib 0x18d9192dc start + 4
根据此崩溃日志,我猜测代码只有在无法处理结果的短值时才会崩溃,即我保存的logID
。然而,我通过传递nil作为结果来测试代码,它似乎仍然没有崩溃。我取0作为短值。
有人能帮我找出这次崩溃的可能原因吗?您的代码崩溃了,因为
[self logID]
没有返回NSNumber
。请参阅此不识别选择器
?如果logID
返回nil
,nil
消息将起作用,[result shortValue]
返回nil
,0
,0.0
或NO
(取决于类型)。请重新格式化你的问题,它是不可读的。正如用“-[NSObject(NSObject)doesNotRecognizeSelector:所说的,不是返回值为零,而是
result`不知道方法shortValue
。换句话说,它可能不是一个NSNumber
实例。问题是为什么,但这取决于你们去调查。它是如何创建的,等等。因此logID基本上是动态保存到核心数据中的,并且在那里被赋予Integer-16类型。当我调用[self logID]时,它应该只因为其属性类型而给我一个NSNumber@属性(非原子,强)NSNumber*logID;我还尝试用nil初始化结果,它仍然没有崩溃,事实上它将0作为其短值。@priti1911.s不,它不应该仅仅因为您如何声明它而给您一个NSNumber
。你写的类型是整数16。但此类型已默认选中“使用标量类型”(类型下方,属性检查器中的默认值),这意味着属性类型应声明为@property(非原子)int16\t logID
。如果取消选中“使用标量类型”,则该属性应声明为@property(可空、非原子、复制)NSNumber*logID
。您可以检查核心数据模型和此属性吗?类型,用户标量类型,…这里我已经展示了声明和存在是两件不同的事情。这并不是因为你说这是一个NSNumber,而是因为它实际上是一个NSNumber<代码>NSNumber*number=[@[@“Hello”]firstObject]是“有效的”,您认为number
实际上是什么?NSNumber
实例或NSString
实例?您的代码崩溃,因为[self logID]
不返回NSNumber
。请参阅此不识别选择器
?如果logID
返回nil
,nil
消息将起作用,[result shortValue]
返回nil
,0
,0.0
或NO
(取决于类型)。请重新格式化你的问题,它是不可读的。正如用“-[NSObject(NSObject)doesNotRecognizeSelector:所说的,不是返回值为零,而是
result`不知道方法shortValue
。换句话说,它可能不是一个NSNumber
实例。问题是为什么,但这取决于你们去调查。它是如何创建的,等等。因此logID基本上是动态保存到核心数据中的,并且在那里被赋予Integer-16类型。当我调用[self logID]时,它应该只因为其属性类型而给我一个NSNumber@属性(非原子,强)NSNumber*logID;我还尝试用nil初始化结果,它仍然没有崩溃,事实上它将0作为其短值。@priti1911.s不,它不应该仅仅因为您如何声明它而给您一个NSNumber
。你写的类型是整数16。但此类型已默认选中“使用标量类型”(类型下方,属性检查器中的默认值),这意味着属性类型应声明为@property(非原子)int16\t logID
。如果取消选中“使用标量类型”,则该属性应声明为@property(可空、非原子、复制)NSNumber*logID
。您可以检查核心数据模型和此属性吗?类型,用户标量类型,…这里我已经展示了声明和存在是两件不同的事情。这并不是因为你说这是一个NSNumber,而是因为它实际上是一个NSNumber<代码>NSNumber*number=[@[@“Hello”]firstObject]是“有效的”,您认为number
实际上是什么?是一个NSNumber
实例还是一个NSString
实例?