ios - 为什么我的 iOS 应用程序在启动时崩溃
问题描述
我已经构建并运行了一个 iOS 应用程序,它一启动就崩溃了,AppDelegate.swift 中出现了这个错误:
线程 1: 异常: "*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil
以下是代码截图供参考。
我无法确定该错误存在于代码的哪一部分,因此我可以通过应用断点进一步调试它。需要帮助来解决这个问题。
添加将对象插入数组以供参考的代码段。
+ (NSArray *)relevantURLSchemes {
NSMutableArray *result = [[NSMutableArray alloc] init];
for (NSBundle *bundle in [[self class] relevantBundles]) {
NSArray *urlTypes = [bundle objectForInfoDictionaryKey:@"CFBundleURLTypes"];
for (NSDictionary *urlType in urlTypes) {
[result addObjectsFromArray:urlType[@"CFBundleURLSchemes"]];
}
}
return result;
}
解决方案
这是因为您试图在数组中插入一个空对象。
您需要在将其插入数组之前检查该值。
@property (strong, nonatomic) NSMutableArray *arr;
确保在使用前已对其进行初始化。
_arr = [[NSMutableArray alloc] init];
当您在其中添加对象/值时,您可以像这样检查。
NSString *strValue = nil;
if (strValue != nil) {
[self.arr addObject:strValue];
}
当您在数组中插入时,请确保插入索引,否则您将在运行时得到数组索引超出范围的错误。
编辑
在将数据添加到数组之前,您应该检查空值。
id schemes = urlType[@"CFBundleURLSchemes"];
if (![schemes isEqual:[NSNull null]] && schemes != nil) {
[result addObjectsFromArray: schemes];
}
推荐阅读
- javascript - 无法读取未定义的属性“on”(TypeError)
- python - 使用 Django 显示用户特定信息
- git - 合并 2 个不同的 git 存储库,从 Heroku 到 GitHub
- java - 为什么在下面的示例中覆盖了静态方法?
- excel - Excel VBA:如何过滤过滤器下拉列表中的最后一个值?
- postgresql - 如何使用具有指定运算符的现有索引添加排除约束?
- sql - 按内部列值过滤外部查询
- java - Java/JavaFX - 在创建它的方法之外使用 removeEventFilter
- asp.net - 动态用户控制数据丢失中的动态选择元素
- user-defined-functions - cassandra CQL 在 where 不使用 UDF