gpt4 book ai didi

ios - Segue - 索引 0 超出空数组的范围

转载 作者:行者123 更新时间:2023-11-29 12:34:07 25 4
gpt4 key购买 nike

下午好

我正处于让 TableViewController 正常工作的最后一步,但我在使用 DetailViewController 时遇到了问题。

在这里你可以找到我的 Segue 代码:我在声明“[self.carMakes objectAtIndex:[myIndexPath row]]”时遇到问题,因为我收到错误:“[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array'"并且我搜索了错误,它与我的数组相关,它是空的。

我将在下面发布更多代码,如果这可以帮助您找到我做错的地方,因为我不知道为什么数组是空的,因为它在 TableVlewController 中显示一切正常。

CarTablewViewController.m

@implementation CarTableViewController

@synthesize carMakes = _carMakes;
@synthesize carModels = _carModels;
@synthesize carImages = _carImages;
//@synthesize jsonArray = _jsonArray;

- (void)viewDidLoad
{
[super viewDidLoad];

[self fetchJson];

[self.tableView reloadData];

}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return 1;
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
return [_jsonArray count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"carTableCell";

CarTableViewCell *cell = [tableView
dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[CarTableViewCell alloc]
initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier];
}

cell.makeLabel.text = [[_jsonArray objectAtIndex:indexPath.row] valueForKey:@"id"];

cell.modelLabel.text = [[_jsonArray objectAtIndex:indexPath.row] valueForKey:@"user"];

NSURL * imageURL = [NSURL URLWithString:[[_jsonArray objectAtIndex:indexPath.row] valueForKey:@"imagen"]];
NSData * imageData = [NSData dataWithContentsOfURL:imageURL];
UIImage * carPhoto = [UIImage imageWithData:imageData];

cell.carImage.image = carPhoto;

return cell;
}

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"ShowCarDetails"])
{
CarDetailViewController *detailViewController = [segue destinationViewController];

NSIndexPath *myIndexPath = [self.tableView indexPathForSelectedRow];

NSLog(@"TEST");

detailViewController.carDetailModel = [[NSMutableArray alloc]
initWithObjects:

[self.carMakes objectAtIndex:[myIndexPath row]],
[self.carModels objectAtIndex:[myIndexPath row]],
[self.carImages objectAtIndex:[myIndexPath row]],

nil];
}
}

-(void)fetchJson {
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{

NSString * urlString = [NSString stringWithFormat:@"http://website.com/service.php"];
NSURL * url = [NSURL URLWithString:urlString];
NSData * data = [NSData dataWithContentsOfURL:url];

self.carModels = [[NSMutableArray alloc] init];
self.carMakes = [[NSMutableArray alloc] init];
self.carImages = [[NSMutableArray alloc] init];
@try
{
NSError *error;
[_jsonArray removeAllObjects];
_jsonArray = [NSJSONSerialization
JSONObjectWithData:data
options:NSJSONReadingMutableContainers|NSJSONReadingMutableLeaves
error:&error];
}
@catch (NSException * e)
{
NSLog(@"Exception: %@", e);
}
@finally
{
[self.tableView reloadData];
}
}
);
}

@end

提前致谢。

最佳答案

您的 TableView 正在使用 [_jsonArray objectAtIndex:indexPath.row] 来填充值。在 -(void)fetchJson 中,您正在初始化数组但不向它们加载任何数据

所以当你这样做时 [self.carMakes objectAtIndex:[myIndexPath row]] 该数组不包含任何内容

您的 TableView 正在使用此代码获取品牌和型号...

cell.makeLabel.text = [[_jsonArray objectAtIndex:indexPath.row] valueForKey:@"id"];

cell.modelLabel.text = [[_jsonArray objectAtIndex:indexPath.row] valueForKey:@"user"];

但你的 Segue 正在这样做

[self.carMakes objectAtIndex:[myIndexPath row]],
[self.carModels objectAtIndex:[myIndexPath row]],

在您的提取中,您没有填充 self.carMakesself.carModels。填充它们或使用

[[_jsonArray objectAtIndex:[myIndexPath row]] valueForKey:@"id"],
[[_jsonArray objectAtIndex:[myIndexPath row]] valueForKey:@"user"],

在你的 Segue 中

关于ios - Segue - 索引 0 超出空数组的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26818394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com