在我的卡布奇诺应用程序中,我通过JSON从RoR后端读取并将结果放入列表中。当应用程序第一次加载时,一切都很好,但当我编辑项目(并将编辑写入数据库)时,刷新项目列表时会产生错误。
错误为CPRangeException: -[_CPJavaScriptArray objectAtIndex:]: index (-1) beyond bounds (3)
。
即使我在没有进行任何实际更改的情况下编辑项目,也会出现此错误。应用程序接收的JSON字符串在这种情况下保持完全相同,没有添加或删除任何项,因此不应将数组写入界外。
这是我的代码:
- (void)connection:(CPRURLConnection)connection didReceiveData:(CPString)data
{
if(connection === listConnection)
{
var results = JSON.parse(data) ;
var posts = [Post initFromJSONObjects:results];
[postListView setContent:posts] ;
// My error occurs at the above line
[postListView setSelectionIndexes:[[CPIndexSet alloc] initWithIndex:0]] ;
}
}
我不确定这是我的代码错误,还是与卡布奇诺框架不一致。有人知道我能做些什么来解决这个问题吗?
代码的其余部分可以在这里找到
在设置posts
之前,您可能应该简单地记录它中的内容。CPLog.info('posts: ' + posts);
应该有效,或者console.log(posts)
。接下来,您可以在Chrome或Safari中设置一个"中断未捕获的异常"调试点,以在您看到的实际错误处停止。确保使用index-debug.html
运行应用程序,以便获得完整的方法名称。然后,查看调用堆栈以了解哪里出了问题应该很容易。这里有很多关于调试卡布奇诺应用程序的信息。