在 UITableView 中传递数据 beetwen 视图控制器

Posted

技术标签:

【中文标题】在 UITableView 中传递数据 beetwen 视图控制器【英文标题】:Passe data beetwen view controller in UITableView 【发布时间】:2015-05-06 10:03:28 【问题描述】:

当用户从UITableView 中选择一个单元格时,我尝试将带有当前ViewControllerPFObject 传递给另一个ViewController,这是我的代码:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *identifier = @"boxCell";
NSInteger row = [indexPath row];
boxTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if(cell == nil)
    cell = [[boxTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];


PFObject *boxe = [PFObject objectWithClassName:@"Boxe"];
boxe = [self.arrayBox objectAtIndex:row];


PFQuery *query = [PFQuery queryWithClassName:@"Boxe"];
[query whereKey:@"objectId" equalTo:boxe.objectId];

[query getFirstObjectInBackgroundWithBlock:^(PFObject *object, NSError *error) 
    if(object)
        // I instanciate the PFObject
        box = object;
        cell.nomBoxe.text = object[@"contenu"];
        cell.qteBoxe.text = [NSString stringWithFormat:@"%@ boxes disponbiles",object[@"quantite"]];
        cell.prixBoxe.text = [NSString stringWithFormat:@"%@€",object[@"prix"]];
        cell.descriptionBoxe.text = object[@"description"];
     else 
        NSLog(@"Erreur lors de chargement, erreur : %@",error.description);
    
];
return cell;


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



-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
if ([[segue identifier] isEqualToString:@"segueToBoxDetail"]) 
    boxDetailViewController *boxDetailVC = [segue destinationViewController];
    boxDetailVC.box = box;
    

我声明了 PFObject:

@implementation RestauCardViewController
PFObject *box;

在另一个 ViewController 中,我有一个对象框的属性:

@property(nonatomic) PFObject *box;

我收到了这个错误:

由于未捕获的异常而终止应用 'NSInvalidArgumentException',原因:'-[UIViewController setBox:]: 无法识别的选择器发送到实例 0x12aad9100'

请帮忙

【问题讨论】:

您遇到的错误是什么... 我收到此错误:由于未捕获的异常 'NSInvalidArgumentException' 导致应用程序终止,原因:'-[UIViewController setBox:]: unrecognized selector sent to instance 0x12aad9100' 不确定,但可能您的 box 属性未分配或初始化 你能显示来自boxDetailViewController的代码 @VivekMolkar #import "boxDetailViewController.h" @interface boxDetailViewController () @property(nonatomic) PFObject *box; @结束 【参考方案1】:

您在错误的位置写入属性。目前您正在类扩展中编写它。类扩展仅用于对该类保密数据。

尝试在 .h 文件中写入相同的属性。

.h 文件中声明的属性可供其他类访问。所以其他类可以访问它的访问器方法并设置它的值。

请告诉我。

【讨论】:

我在 .h 文件中声明了该属性,但它不起作用 ohhh... 请检查您的故事板中是否有任何名为“setBox”的选择器。但它不在您的代码中。请检查 我检查了,但有任何名为“setBox”的选择器【参考方案2】:

在您的prepareForSegue: 中,将您的声明替换为这一行。

boxDetailViewController *boxDetailVC = (boxDetailViewController*)[segue destinationViewController];

编辑 请移步

property(nonatomic) PFObject *box; 

到您的 .h 文件的行

【讨论】:

它不起作用,但是当我删除这一行时它起作用了:boxDetailVC.box = box; 它肯定会起作用,因为那是引发错误的行。您发布的错误意味着box 的情况下没有这样的属性。 如果你输入 boxDetailVC.box= nil 会发生什么?崩溃了?【参考方案3】:

我也遇到了同样的错误。解决了所以想在这里分享一下。

我有一个UIViewController 类,它与UITableViewController 的segue 连接。

实际上,我正在将 segue 与 UINavigationController 连接起来。

将 segue 连接更改为UITableViewController 解决了问题。

【讨论】:

以上是关于在 UITableView 中传递数据 beetwen 视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

将 managedobject 从 uitableview 传递到文本字段以在核心数据模型中进行编辑

UITableView 在嵌入在容器中的控制器之间传递数据

详细视图 UITableView - 在 segue 之前传递数据

将数据传递到 UITableView

UITableView 传递数据

使用自定义单元格在两个 UITableView 之间传递数据