0

我在 UITableViewController 内的表视图上实现了 UIRefreshControl。今天我的朋友(第一个测试者)正在玩这个应用程序,他能够通过拉动刷新来使崩溃,而当它刷新时,又很快地拉动了几次。我知道这不是一件常见的事情,但我可以很容易地重新创建它。我猜我实现刷新控件的方式有问题,因为我尝试使用 Gmail 应用程序重新创建它并且它没有崩溃。

这是我得到的错误:

[1008:907] * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '* -[__NSCFConstantString stringByAppendingString:]: nil argument' * First throw call stack: (0x343f32a3 0x3c08d97f 0x343f31c5 0x34c5c5e1 0x496b5 0x3624654d 0x3622b313 0x362427cf 0x361fe803 0x35fa8d8b 0x35fa8929 0x35fa985d 0x35fa9243 (0x35fa9051 0x35fa8eb1 0x343c86cd 0x343c69c1 0x343c6d17 0x34339ebd 0x34339d49 0x37efb2eb 0x3624f301 0x46da5 0x3c4c4b20)libc++abi.dylib:终止调用抛出异常

在 ViewDidLoad 下

// pull to refresh
UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
[refreshControl addTarget:self action:@selector(updateTableView:) forControlEvents:UIControlEventValueChanged];
[self setRefreshControl:refreshControl];

这是 updateTableView 方法:

- (void)updateTableView:(id)sender {

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"MMM d, h:mm:ss a"];
    NSString *lastUpdated = [NSString stringWithFormat:@"Last updated on %@", [formatter stringFromDate:[NSDate date]]];

    self.refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:lastUpdated];

    if(topOptions.selectedSegmentIndex  == 0) {
        //fetch the feed
        _feed = [[FetchData alloc] initFromURLWithString:@"some json file" completion:^(JSONModel *model, JSONModelError *err) {

            [self.tableView reloadData];
            [(UIRefreshControl *)sender endRefreshing];
        }];
    } else if (topOptions.selectedSegmentIndex  == 1) {
        //fetch the feed
        _feed = [[FetchData alloc] initFromURLWithString:@"another json file" completion:^(JSONModel *model, JSONModelError *err) {

            [self.tableView reloadData];
            [(UIRefreshControl *)sender endRefreshing];
        }];

    }
}

我猜测(来自 nil 参数)通过多次执行刷新请求,它会达到无法找到值的点?我对此有点陌生,所以任何想法都非常感谢。

如果您需要代码的任何其他部分,请告诉我。

4

0 回答 0