【问题标题】:Adding elements in an array. Thread/simulator issues?在数组中添加元素。线程/模拟器问题?
【发布时间】:2014-04-13 15:24:13
【问题描述】:

我正在尝试获取一个名为 _operationArray 的数组,其中存储了 NSNumbers。我想把数组的最后两个元素加在一起。在下面的代码中,endObject 应该是数组中的最后一个元素空间,secondToEndObject 应该是倒数第二个元素空间。然后我尝试将这两个元素加在一起。没有错误或警告,但是当我尝试在模拟器中运行它并按下按钮时,模拟器关闭,xcode 打开并说出有关线程的内容(我不明白)。

- (IBAction)addition:(id)sender {

NSUInteger endObject = [_operationArray count];
NSUInteger secondToEndObject = [_operationArray count] - 2;
NSUInteger firstNumber =[[_operationArray objectAtIndex:endObject] integerValue] ;
NSUInteger secondNumber = [[_operationArray objectAtIndex:secondToEndObject] integerValue];
_theResult = [NSNumber numberWithInteger:((signed)(firstNumber + secondNumber))];

}

就像我说的,我真的不明白这个问题,所以如果需要任何其他信息来解决这个问题,请告诉我。感谢您的帮助,谢谢!

错误图片:http://www.image-maps.com/m/private/0/gmc4i1qcq1i7eihesndgdn5q92_screen-shot-2014-04-13-at-11.39.14-am.png

【问题讨论】:

  • @Leonardo Bernardini 指出的两个问题(索引和检查是否至少有 2 个元素)是正确的。但是,请显示错误消息(关于线程)。
  • 如果您无法复制/粘贴它们,请查看如何在 Mac 上截屏。
  • 好的,在底部中间的“框”上,点击灰色面板,靠近蓝色面板,应该可以看到记录的错误。
  • 出于好奇,您的模拟器上是否运行任何程序?几乎不知道是否需要重新安装它...
  • 请参阅raywenderlich.com/10209/my-app-crashed-now-what-part-1 了解如何使用调试器。

标签: objective-c arrays xcode types ios-simulator


【解决方案1】:

这样的东西似乎更接近你想要的。

- (IBAction)addition:(id)sender {
  // You said the array holds NSNumbers, so that's what you are getting out of it
  NSNumber *lastNumber = _operationArray.lastObject;
  NSNumber *penultimateNumber = _operationArray[_operationArray.count - 2];

  NSNumber *_theResult = @(lastNumber.integerValue + penultimateNumber.integerValue);
}

【讨论】:

  • 如果没有看到有关崩溃或错误的更多信息,任何人都很难知道这一点
  • 根据您发布的原始代码,您似乎对 Objective-C 的某些方面感到困惑,因此问题可能来自此方法之外的某个地方。
  • @user3527434 尝试添加异常断点。这样你就会看到你的代码到底在哪里崩溃了。 blog.manbolo.com/2012/01/23/xcode-tips-1-break-on-exceptions
【解决方案2】:

[_operationArray count] 是错误的,你正在使用 base 0 索引,这意味着最后一项是 [_operationArray count]-1;

你也应该经常检查是否 [_operationArray count] >= 2 避免崩溃

【讨论】:

  • 关于崩溃,您可能在主线程中获得了 EXC BAD ACCESS,这意味着您正在读取/访问一个未初始化的内存块
  • 非常感谢,但这似乎并没有解决问题。莱昂纳多,我该如何解决这个 EXC BAD ACCESS?
  • 您确定数组中有 NSNumber* 指针吗?在获取对象之前放置一个断点并检查它..
  • 好的,我正在添加断点和 if 语句来检查这一点,谢谢!
猜你喜欢
  • 1970-01-01
  • 2022-11-30
  • 2022-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-08
  • 2012-02-06
  • 2013-01-26
相关资源
最近更新 更多