0

特定の情報をロードした PFQueryTableViewController があります。クリックしたセルの値を取得して、クリックしたセルのクラス名の情報を含む別のテーブルを開きたいです。私は多くの方法を試しましたが、うまくいきません。エラーが次のように表示されるため、セルのラベルの値を取得していないと思います。

キャッチされていない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。理由: ' setObjectForKey: オブジェクトを nil にすることはできません (キー: クラス名)'

私はこのコードを使用しています:

    - (id)initWithCoder:(NSCoder *)aCoder {
    self = [super initWithCoder:aCoder];
    if (self) {
    // Custom the table

    // The className to query on
    self.parseClassName = @"Hospitales";

    // The key of the PFObject to display in the label of the default cell style
    self.textKey = @"Hospital";

    // The title for this table in the Navigation Controller.
    self.title = @"Hospitals";

    // Whether the built-in pull-to-refresh is enabled
    self.pullToRefreshEnabled = YES;

    // Whether the built-in pagination is enabled
    self.paginationEnabled = YES;

    // The number of objects to show per page
    self.objectsPerPage = 10;
}
return self;
}

- (void)viewDidLoad
{
[super viewDidLoad];


}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (PFQuery *)queryForTable {
PFQuery *query = [PFQuery queryWithClassName:self.parseClassName];

// If no objects are loaded in memory, we look to the cache first to fill the table
// and then subsequently do a query against the network.
if ([self.objects count] == 0) {
    query.cachePolicy = kPFCachePolicyCacheThenNetwork;
}

[query orderByAscending:@"Location"];

return query;
}

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

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

// Configure the cell
cell.textLabel.text = [object objectForKey:@"Hospital"];
cell.detailTextLabel.text = [NSString stringWithFormat:@"Location: %@", [object objectForKey:@"Location"]];

return cell;
}


-(void)tableView:(UITableView *)tableView CellAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
cell.textLabel.text = [_data objectAtIndex:indexPath.row];
}


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

[self performSegueWithIdentifier:@"People" sender:self];

}


- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// Check that a new transition has been requested to the DetailViewController and prepares for it
if ([segue.identifier isEqualToString:@"People"]){
    //Get the selected data
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
    NSString* hospitalData = _data[indexPath.row];
    [[segue destinationViewController]setHospital:hospitalData];
}
}
4

1 に答える 1

0

UI に依存して必要なデータを取得するのは安全ではありません。その結果、コア MVC の概念に違反しています。

didSelectRowAtIndexPath

-(void)tableView:(UITableView *)tableView
              didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    [self performSegueWithIdentifier:@"People" sender:self];
}

セグエの準備

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"People"]){
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
        PFObject *object = [self.objects objectAtIndex:indexPath.row];
        [[segue destinationViewController] setDetailItem:object];
    }
}
于 2014-04-08T15:42:11.070 に答える