- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图在从 JSON 解析对象后填充 TableView 。我想将行数设置为已解析对象的计数。
这是我的 viewDidLoad 代码:
- (void)viewDidLoad
{
[super viewDidLoad];
// initializing data source
[self setNotifications:[[NSMutableArray alloc] init]];
NSURL *url = [NSURL URLWithString:SourceURL];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
[self setNotifications:[JSON objectForKey:@"notifications"]];
// [[self tableView] setHidden:NO];
[[self tableView] reloadData];
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
NSLog(@"Request Failure Because %@",[error userInfo]);
}];
[operation start];
这是我的一种数据源方法(我相信错误一定在这里):
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if ([self notifications] && [[self notifications] count] ) {
return [[self notifications] count];
} else{
return 0;
}
}
这是我的完整错误信息:
> *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 1 beyond bounds [0 ..
> 0]'
> *** First throw call stack: (0x13c4012 0x118ce7e 0x1379b44 0x510c04 0x300ea0 0x2b5c4e 0x2b8224 0x17c952 0x17c2dc 0xc4a9d14 0x26e0 0x16ea2
> 0x18409 0x162753f 0x1639014 0x16297d5 0x136aaf5 0x1369f44 0x1369e1b
> 0x22647e3 0x2264668 0xd0ffc 0x1f1d 0x1e45) libc++abi.dylib: terminate
> called throwing an exception
更新:
这是我的 cellForRowAtIndexpath 方法:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellID = @"readNotification";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
if (!cell){
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellID];
}
NSDictionary *notification = [[self notifications] objectAtIndex:[indexPath row]];
[[cell textLabel] setText:[notification objectForKey:@"from"]];
[[cell detailTextLabel] setText:[notification objectForKey:@"date"]];
return cell;
}
更新 2
我在项目中添加了一些日志,它提供了一些有趣的输出:
2013-08-06 23:53:03.994 NotificationReader[1193:c07] 1. before request 2013-08-06 23:53:04.023 NotificationReader[1193:c07] 2. json parshing operation started 2013-08-06 23:53:04.031 NotificationReader[1193:c07] 3. entered the numberOfRowsInSection block 2013-08-06 23:53:04.040 NotificationReader[1193:c07] No notifications 2013-08-06 23:53:04.319 NotificationReader[1193:c07] 3. entered the numberOfRowsInSection block 2013-08-06 23:53:04.320 NotificationReader[1193:c07] There were 14 notifications 2013-08-06 23:53:08.260 NotificationReader[1193:c07] * Terminating app due to uncaught exception
所以首先它认为我的数组是空的,然后它重新加载并获得正确的通知计数。不幸的是,它从未进入 cellForRowAtIndexPath 方法..
更新 3
我在我的项目中添加了一个异常断点,并做了一些额外的日志记录,我假设它在重新加载 TableView 时遇到了问题。这是目前的结果:
2013-08-07 08:40:58.104 NotificationReader[433:c07] 1. before request
2013-08-07 08:40:58.107 NotificationReader[433:c07] 2. json parshing operation started
2013-08-07 08:40:58.113 NotificationReader[433:c07] 3. entered the numberOfRowsInSection block
2013-08-07 08:40:58.120 NotificationReader[433:c07] Found 0 notifications!
2013-08-07 08:41:10.852 NotificationReader[433:c07] Trying to reload data
2013-08-07 08:41:10.853 NotificationReader[433:c07] data needs to be reloaded
2013-08-07 08:41:10.854 NotificationReader[433:c07] 3. entered the numberOfRowsInSection block
2013-08-07 08:41:10.855 NotificationReader[433:c07] Found 14 notifications!
2013-08-07 08:41:10.858 NotificationReader[433:c07] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 1 beyond bounds [0 .. 0]'
*** First throw call stack:
(0x13c5012 0x118de7e 0x137ab44 0x511c04 0x301ea0 0x2b6c4e 0x2b9224 0x17d952 0x17d2dc 0xc4c0d14 0x351b 0x162853f 0x163a014 0x162a7d5 0x136baf5 0x136af44 0x136ae1b 0x22657e3 0x2265668 0xd1ffc 0x2c4d 0x2b75)
libc++abi.dylib: terminate called throwing an exception}
堆栈跟踪:
#0 0x0118de52 in objc_exception_throw ()
#1 0x0137ab44 in -[__NSArrayI objectAtIndex:] ()
#2 0x00511c04 in -[UITableViewDataSource tableView:heightForRowAtIndexPath:] ()
#3 0x00301ea0 in -[UITableViewController tableView:heightForRowAtIndexPath:] ()
#4 0x002b6c4e in -[UISectionRowData refreshWithSection:tableView:tableViewRowData:] ()
#5 0x002b9224 in -[UITableViewRowData numberOfRows] ()
#6 0x0017d952 in -[UITableView noteNumberOfRowsChanged] ()
#7 0x0017d2dc in -[UITableView reloadData] ()
#8 0x0c4a9d14 in -[UITableViewAccessibility(Accessibility) reloadData] ()
#9 0x0000351b in __36-[NRTableViewController viewDidLoad]_block_invoke_2 at /Users/jozsef/Development/NotificationReader/NotificationReader/NRTableViewController.m:52
我尝试使用 lldb 得到这个结果:
(lldb) po [[self notifications] count]
error: Execution was interrupted, reason: Attempted to dereference an invalid pointer..
The process has been returned to the state before execution.
最佳答案
这是由于试图访问超出数组边界的索引造成的。从表面上看,唯一的数组访问是在 -tableView:cellForRowAtIndexPath:
:
NSDictionary *notification = [[self notifications] objectAtIndex:[indexPath row]];
我希望这是引发异常的地方。
您可以通过从断点导航器中添加“添加异常断点...”来确定。
通过确认 [indexPath row]
在 [self notifications]
数组的范围内来解决这个问题。或者,如果您希望它始终在范围内,那么找出它可能超出范围的原因。
附带说明,您可以按如下方式重写您的方法之一:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [self.notifications count];
}
如果 self.notifications 是 nil,这将返回 0。如果 count 是 0,那么它显然会返回 0。这就是所有需要的。
编辑:最后,您还可以使用下标重写数组访问,如下所示:
NSDictionary *notification = self.notifications[indexPath.row];
确保在 AFJSONRequestOperation 的成功 block 中调用主线程上的 UI 更新,即
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
// update on the main thread!
dispatch_async(dispatch_get_main_queue(), ^{
[self setNotifications:[JSON objectForKey:@"notifications"]];
// [[self tableView] setHidden:NO];
[[self tableView] reloadData];
});
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
NSLog(@"Request Failure Because %@",[error userInfo]);
}];
关于iphone - NSRangeException 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18090424/
我已经使用 vue-cli 两个星期了,直到今天一切正常。我在本地建立这个项目。 https://drive.google.com/open?id=0BwGw1zyyKjW7S3RYWXRaX24tQ
您好,我正在尝试使用 python 库 pytesseract 从图像中提取文本。请找到代码: from PIL import Image from pytesseract import image_
我的错误 /usr/bin/ld: errno: TLS definition in /lib/libc.so.6 section .tbss mismatches non-TLS reference
我已经训练了一个模型,我正在尝试使用 predict函数但它返回以下错误。 Error in contrasts<-(*tmp*, value = contr.funs[1 + isOF[nn]])
根据Microsoft DataConnectors的信息我想通过 this ODBC driver 创建一个从 PowerBi 到 PostgreSQL 的连接器使用直接查询。我重用了 Micros
我已经为 SoundManagement 创建了一个包,其中有一个扩展 MediaPlayer 的类。我希望全局控制这个变量。这是我的代码: package soundmanagement; impo
我在Heroku上部署了一个应用程序。我正在使用免费服务。 我经常收到以下错误消息。 PG::Error: ERROR: out of memory 如果刷新浏览器,就可以了。但是随后,它又随机发生
我正在运行 LAMP 服务器,这个 .htaccess 给我一个 500 错误。其作用是过滤关键字并重定向到相应的域名。 Options +FollowSymLinks RewriteEngine
我有两个驱动器 A 和 B。使用 python 脚本,我在“A”驱动器中创建一些文件,并运行 powerscript,该脚本以 1 秒的间隔将驱动器 A 中的所有文件复制到驱动器 B。 我在 powe
下面的函数一直返回这个错误信息。我认为可能是 double_precision 字段类型导致了这种情况,我尝试使用 CAST,但要么不是这样,要么我没有做对...帮助? 这是错误: ERROR: i
这个问题已经有答案了: Syntax error due to using a reserved word as a table or column name in MySQL (1 个回答) 已关闭
我的数据库有这个小问题。 我创建了一个表“articoli”,其中包含商品的品牌、型号和价格。 每篇文章都由一个 id (ID_ARTICOLO)` 定义,它是一个自动递增字段。 好吧,现在当我尝试插
我是新来的。我目前正在 DeVry 在线学习中级 C++ 编程。我们正在使用 C++ Primer Plus 这本书,到目前为止我一直做得很好。我的老师最近向我们扔了一个曲线球。我目前的任务是这样的:
这个问题在这里已经有了答案: What is an undefined reference/unresolved external symbol error and how do I fix it?
我的网站中有一段代码有问题;此错误仅发生在 Internet Explorer 7 中。 我没有在这里发布我所有的 HTML/CSS 标记,而是发布了网站的一个版本 here . 如您所见,我在列中有
如果尝试在 USB 设备上构建 node.js 应用程序时在我的树莓派上使用 npm 时遇到一些问题。 package.json 看起来像这样: { "name" : "node-todo",
在 Python 中,您有 None单例,在某些情况下表现得很奇怪: >>> a = None >>> type(a) >>> isinstance(a,None) Traceback (most
这是我的 build.gradle (Module:app) 文件: apply plugin: 'com.android.application' android { compileSdkV
我是 android 的新手,我的项目刚才编译和运行正常,但在我尝试实现抽屉导航后,它给了我这个错误 FAILURE: Build failed with an exception. What wen
谁能解释一下?我想我正在做一些非常愚蠢的事情,并且急切地等待着启蒙。 我得到这个输出: phpversion() == 7.2.25-1+0~20191128.32+debian8~1.gbp108
我是一名优秀的程序员,十分优秀!