崩溃:在iOS中shortValue何时可以返回nil?

崩溃:在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

我在我的班上遇到了一个崩溃,方法如下\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-

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
实例?