【问题标题】:why my iOS app is getting crashed on launching [closed]为什么我的 iOS 应用程序在启动时崩溃 [关闭]
【发布时间】:2020-10-12 08:49:44
【问题描述】:

我已经构建并运行了一个 iOS 应用程序,它一启动就崩溃了,AppDelegate.swift 中出现此错误:

线程 1:异常:“*** -[__NSArrayM insertObject:atIndex:]:对象不能为 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;
}

【问题讨论】:

  • 请贴一些代码。你在哪里插入一个对象到数组中?
  • @Mahendra 我已经通过输入所需的代码来编辑问题。请看看这个
  • 检查编辑的答案。
  • 那是 Objective-C,不是 Swift。

标签: ios objective-c crash appdelegate


【解决方案1】:

这是因为你试图在数组中插入一个空对象。

您需要在将其插入数组之前检查该值。

@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];
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    • 1970-01-01
    • 2014-08-07
    • 2015-09-20
    • 2018-03-04
    • 2021-11-07
    • 2018-12-27
    相关资源
    最近更新 更多