推送查询对象以查看控制器

时间:2014-01-24 18:28:56

标签: xcode object uiviewcontroller action

我有一个抓取10个对象的查询,我正在尝试一个动作,向您显示一个窗口,其中包含有关所选对象的更多信息,我只是新手Xcode并且无法弄清楚如何将信息推送到新视图控制器。这是我创建查询的代码。

PFQuery *query = [PFQuery queryWithClassName:@"Arcade"];
CLLocation *currentLocation = locationManager.location;
PFGeoPoint *userLocation =
[PFGeoPoint geoPointWithLatitude:currentLocation.coordinate.latitude
                       longitude:currentLocation.coordinate.longitude];
query.limit = 10;
[query whereKey:kPAWParseLocationKey nearGeoPoint:userLocation withinMiles:kPAWWallPostMaximumSearchDistance];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    if (!error) {
        // The find succeeded.
        NSLog(@"Successfully retrieved %d scores.", objects.count);
        // Do something with the found objects
        int i = 0;
        for (PFObject *object in objects) {
            if (i >= [self.EventTitles count]) break;//to make sure we only write up to the max number of UILabels available in EventTitles
            [(UILabel *)self.EventTitles[i] setText:[object objectForKey:@"name"]];//I assume the "objectId" property of object is an NSString!
            i++;
        }
    } else {
        // Log details of the failure
        NSLog(@"Error: %@ %@", error, [error userInfo]);
    }
}];

这是推送到新视图控制器的操作:

-(IBAction)DetailEvent1:(id)sender{

TableDetailViewController  *objDetail = [[TableDetailViewController alloc] initWithNibName:@"TableDetailViewController" bundle:nil];
[self addChildViewController:objDetail];
objDetail.view.frame = CGRectMake(0.0f, 0.0f, 320.0f, self.view.bounds.size.height - 0.0f);
[self.view addSubview:objDetail.view];

}

如果有人可以帮助我编写需要添加到DetailEvent1操作的一行代码,以便推送所选对象,我将非常感激。

1 个答案:

答案 0 :(得分:0)

TableDetailViewController  *objDetail = 
    [[TableDetailViewController alloc] 
        initWithNibName:@"TableDetailViewController" bundle:nil];
objDetail.query = self.query

换句话说,这是您创建下一个视图控制器的那一刻。两个视图控制器现在处于联系状态(selfobjDetail)。所以这是将数据从一个传递到另一个的时刻。

当然,没有TableDetailViewController属性query。还没!但是你要制作一个,不管怎么说 - 这样你就可以做出这个确切的动作。

哦,也许query中也没有self属性。但是你需要一个,因为你需要一种方法来保持你在第一种方法中得到的query,这样你在第二种方法中仍然可以使用它。在同一对象的方法之间共享数据的方式通常是通过属性。

另请参见此示例from my book

- (void)showItemsForRow: (NSIndexPath*) indexPath {
    // create subtable of tracks and go there
    TrackViewController *t =
        [[TrackViewController alloc] initWithMediaItemCollection:
            (self.albums)[indexPath.row]];
    [self.navigationController pushViewController:t animated:YES];
}

在那个例子中,我走得更远:我实际上已经为TrackViewController提供了一个指定的初始化程序,以便我可以创建它并将数据全部交给一行。