启动时ios应用程序崩溃

时间:2014-11-27 01:57:54

标签: ios crash crashlytics

我开始在我的iphone应用程序中使用crashlytics,它似乎在启动期间(或者我猜的是启动时)某些用户崩溃了。这是堆栈跟踪:

Fatal Exception: NSInvalidArgumentException
-[NSNull rangeOfCharacterFromSet:]: unrecognized selector sent to instance 0x19687eba0
Thread : Fatal Exception: NSInvalidArgumentException
0  CoreFoundation                 0x00000001854aa59c __exceptionPreprocess + 132
1  libobjc.A.dylib                0x0000000195bfc0e4 objc_exception_throw + 60
2  CoreFoundation                 0x00000001854b1664 __methodDescriptionForSelector
3  CoreFoundation                 0x00000001854ae418 ___forwarding___ + 928
4  CoreFoundation                 0x00000001853b2b6c _CF_forwarding_prep_0 + 92
5  UIKit                          0x0000000189fc38a0 -[UILabel _contentInsetsFromFonts] +    104
6  UIKit                          0x000000018a13ac90 -[_UILabelLayer updateContentInsets] + 76
7  UIKit                          0x000000018a13ad50 -[_UILabelLayer updateContentLayerSize] + 56
8  UIKit                          0x000000018a13ae34 -[_UILabelLayer layoutSublayers] + 36
9  QuartzCore                     0x00000001895ac564    CA::Layer::layout_if_needed(CA::Transaction*) + 320
10 QuartzCore                     0x00000001895ac408 CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 32
11 QuartzCore                     0x00000001895abc08 CA::Context::commit_transaction(CA::Transaction*) + 276
12 QuartzCore                     0x00000001895ab98c CA::Transaction::commit() + 436
13 QuartzCore                     0x00000001895a53bc CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) + 80
14 CoreFoundation                 0x0000000185462a50 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 32
15 CoreFoundation                 0x000000018545f9dc __CFRunLoopDoObservers + 360
16 CoreFoundation                 0x000000018545fdbc __CFRunLoopRun + 836
17 CoreFoundation                 0x000000018538d0a4 CFRunLoopRunSpecific + 396
18 GraphicsServices               0x000000018e52f5a4 GSEventRunModal + 168
19 UIKit                          0x0000000189cc23c0 UIApplicationMain + 1488
20 partybutton                    0x00000001000d6de0 main (main.m:16)
21 libdyld.dylib                  0x000000019626aa08 start + 4

不确定如何调试这个,因为我无法自己重现。有什么指针吗?

6 个答案:

答案 0 :(得分:14)

我有类似的问题。来自服务器的JSON响应包含NULL / null。像这样:

"result":[
    {
        "id":"44",
        "message":null,
    }]

我创建了一个NSNull类的类别。然后添加导致异常的NSString方法。

NSNull + JSON.h文件:

#import <UIKit/UIKit.h>

@interface NSNull(JSON)

@end

NSNull + JSON.m文件:

@implementation NSNull (JSON)

- (NSUInteger)length { return 0; }

- (NSInteger)integerValue { return 0; };

- (float)floatValue { return 0; };

- (NSString *)description { return @"0(NSNull)"; }

- (NSArray *)componentsSeparatedByString:(NSString *)separator { return @[]; }

- (id)objectForKey:(id)key { return nil; }

- (BOOL)boolValue { return NO; }

- (NSRange)rangeOfCharacterFromSet:(NSCharacterSet *)aSet{
    NSRange nullRange = {NSNotFound, 0};
    return nullRange;
}

//add methods of NSString if needed

@end

通过这样做,我不必在每个变量中检查NULL。

答案 1 :(得分:2)

对于我的情况,从服务中重新发送的JSON数据包含NULL String,而Json解析将其视为字符串,但iOS系统不会。

答案 2 :(得分:0)

kazi.munshimun,您可以使用NSDictionary扩展类来执行此操作。它会自动检查NULL字段。

GitHub: NSDictionary extension class

答案 3 :(得分:0)

在我的情况下,[NSNull rangeOfCharacterFromSet:]错误与空的用户定义的运行时归因相关,我的哪个视图控制器需要与第三方自定义导航控制器一起使用

答案 4 :(得分:0)

IOS不认为NULL为nil,并且在运行时它崩溃了.. 要解决这个问题,只需将您的json字符串与NSNULL进行比较,然后分配给字符串变量

NSString * yourVariable =([stringVariable isEqual:[NSNull null]])? @&#34;&#34; :stringVariable;

答案 5 :(得分:0)

简单的方法是检查     NSString *city= set value from json ;   例如

然后进行检查 - &gt;

NSString *city=[responseDictionaryForEachRow     valueForKey:@"City"];
if (![city isKindOfClass:[NSNull class]]){
    @"Your code if string is not null";`
}