【问题标题】:NSRangeException errorNSRangeException 错误
【发布时间】:2012-04-07 16:49:24
【问题描述】:

我是 obj c n00b,如果这是一个愚蠢的问题,请原谅我,但是当这个 JSON 调用发生时我的应用程序崩溃了,而且之前没有。我 95% 肯定这与服务器上的 php 调用有关。希望对此有任何想法。 :)

谢谢!

这就是它崩溃的地方......

else if([ret_st hasPrefix:@"Account veri"]){


    NSMutableArray *Array=[ret_st componentsSeparatedByString:@"_"];
    appDelegate.user_id=[Array objectAtIndex:1];

NSLog(@"user_id %@",appDelegate.user_id);

2012-04-07 09:43:51.094 App[57919:15e03] 请求 requestType=signup&name=Test&email=test@test.com&password=test&zip=90084&id=22 return_strr 帐户已验证204 2012-04-07 09:43:51.094 App[57919:15e03] * 由于未捕获的异常“NSRangeException”而终止应用程序,原因:“* -[__NSArrayI objectAtIndex:]:索引 1 超出范围 [ 0 .. 0]' * 首先抛出调用栈: (0x1a23022 0x1e0ccd6 0x1a0f644 0xdb5d 0x10a85d 0x19f7936 0x19f73d7 0x195a790 0x1959d84 0x1959c9b 0x230d7d8 0x230d88a 0x442626 0x442626 0x) 终止称为抛出异常

【问题讨论】:

  • 如果我们有您认为发生此异常的位置的代码示例,将会有所帮助。使用NSLogs 可以帮助您缩小范围。
  • 所以 Array 里面没有对象,访问索引 1 会导致这个异常。
  • 这是否意味着我需要更改返回字符串或其他内容?因为从 JSON 调用中它得到了 Account verify204?
  • 记录ret_st 的内容以查看它实际返回的内容。

标签: iphone objective-c xcode


【解决方案1】:

在某个地方,您有一个数组,其中一个对象位于索引 0(边界 [0 .. 0])处,但您要求索引 1 处的对象(索引 1 超出范围)。检查objectAtIndex: 调用的代码。

【讨论】:

  • 它在这里中断:NSMutableArray *Array=[ret_st componentsSeparatedByString:@"_"]; appDelegate.user_id=[数组 objectAtIndex:1];我需要更改 objectAtIndex 吗?
  • 是的,@MaxRoper。 NSLog 该字符串,然后再分成组件。我相信你会发现它没有下划线。当它只分解为一个字符串(本身)时,您将拥有一个最大索引为 0 的数组。索引 1 超出范围。
  • 不仅仅是索引,还有程序逻辑。按照我的阅读方式,您遇到ret_st 与您期望的不匹配的情况。你需要问问自己你想对此做什么。此外,componentsSeparatedByString: 返回 NSArray,而不是 NSMutableArray。
  • 非常感谢!唯一奇怪的是该应用程序将于周二上线,而且时间不足以让 Apple 进行更新。如果我在返回字符串中添加一个 _ 会起作用吗?
  • 认为尾随的 _ 会将一个空字符串作为第二个组件(索引 1)放入您的数组中,这应该可以掩盖当前的问题。 (您必须尝试一下才能确定。)任何人都可以猜测这会对您的程序的其余部分产生什么影响。
猜你喜欢
  • 2018-08-05
  • 2013-03-17
  • 2016-09-15
  • 2013-10-29
  • 1970-01-01
  • 1970-01-01
  • 2013-02-07
  • 2014-05-10
  • 1970-01-01
相关资源
最近更新 更多