gpt4 book ai didi

ios - didSelectRowAtIndexPath 不适用于 NSNotificationCenter

转载 作者:行者123 更新时间:2023-11-29 03:47:52 25 4
gpt4 key购买 nike

我正在开发一个 MasterDetail 应用程序,该应用程序将用于显示玩家(如体育运动)和详细统计数据。玩家列表是从 Postgres 数据库调用的,并使用 JSONModel 从 JSON 解析。到目前为止,我已经能够从 Postgres DB 中获取所需的所有数据,并将其完美地显示在 MasterView 中。我正在使用 NSNotificationCenter 将数据从主视图传递到详细 View (我使用 MasterView 中的函数获取数据)。我能够将数据准确地传递到详细 View ,但由于某种原因,我的 didSelectRowAtIndexPath 无法正常工作。我显然做错了什么,但我不知道那是什么。以下是代码的重要部分:

在MasterViewController.m viewDidAppear中:

-(void)viewDidAppear:(BOOL)animated
{

//fetch the feed from the Postgres Database

[JSONHTTPClient getJSONFromURLWithString:@"http://myurl" completion:^(NSDictionary *json, JSONModelError *err) {
NSError* error = nil;
_feed = [[PostgresFeed alloc]initWithDictionary:json error:&error];

//Print the data fethced to NSLog in JSON format
NSLog(@"Players: %@", _feed.players);

[[NSNotificationCenter defaultCenter] postNotificationName:@"myNotification" object:nil userInfo:json];

//reload the table view after data collected
[self.tableView reloadData];

}];
}

我在 DetailViewController.m 中收集该信息,如下所示:

- (void)handleNotification:(NSNotification *) notification
{
NSLog(@"%@", notification.userInfo);
NSArray *playerData = [notification.userInfo objectForKey:@"player"];
NSDictionary *firstElement = [playerData objectAtIndex:0];

nameLabel.text = [firstElement objectForKey:@"name"];

}

然后是我的 MasterViewController 中的 didSelectRowAtIndexPath

#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

[tableView deselectRowAtIndexPath:indexPath animated:YES];


Player *selectedPlayer = [_players objectAtIndex:indexPath.row];

if (_delegate) {
[_delegate selectedPlayer:slectedPlayer];
}
}

给你了。如果您希望我发布更多内容,或者您​​想要 DetailViewController.m、MasterViewController.h 或 PlayerSelectionDelegate.h 中的代码,请告诉我。

请注意,我最初是根据不久前的 Ray Wenderlich iPad SplitView 应用程序教程创建的。是的,我对这一切都很陌生。

最佳答案

您需要将 NSNotification 放在

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

[tableView deselectRowAtIndexPath:indexPath animated:YES];
//Here you have the NSDictionary from the json
[JSONHTTPClient getJSONFromURLWithString:@"http://myurl" completion:^(NSDictionary *json, JSONModelError *err) {
NSError* error = nil;
_feed = [[PostgresFeed alloc]initWithDictionary:json error:&error];

//Print the data fethced to NSLog in JSON format
NSLog(@"Players: %@", _feed.players);
[JSONHTTPClient getJSONFromURLWithString:@"http://myurl" completion:^(NSDictionary *json, JSONModelError *err) {
NSError* error = nil;
_feed = [[PostgresFeed alloc]initWithDictionary:json error:&error];

//Print the data fethced to NSLog in JSON format
NSLog(@"Players: %@", _feed.players);
//Assuming that you have the players in the same order as your list
[[NSNotificationCenter defaultCenter] postNotificationName:@"myNotification" object:nil userInfo:[[json objectForKey:@"players"]objectAtIndex:indexPath.row]];
}];


Player *selectedPlayer = [_players objectAtIndex:indexPath.row];

if (_delegate) {
[_delegate selectedPlayer:slectedPlayer];
}
}

在你的 DetailViewController 中:

- (void)handleNotification:(NSNotification *) notification
{
NSLog(@"%@", notification.userInfo);

nameLabel.text = [notification.userInfo objectForKey:@"name"];

关于ios - didSelectRowAtIndexPath 不适用于 NSNotificationCenter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17479737/

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