Ios Segue的Objective-C问题
我这里有一段话:Ios Segue的Objective-C问题,ios,objective-c,segue,Ios,Objective C,Segue,我这里有一段话: - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([[segue identifier] isEqualToString:@"showDetail"]) { NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; //NSDate *object = self.o
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"showDetail"]) {
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
//NSDate *object = self.objects[indexPath.row];
NSString *strPOIndex = [self.tableData[indexPath.row] valueForKey:@"POIndex"];
LHPurchaseOrderDetail *controller = (LHPurchaseOrderDetail *)[[segue destinationViewController] topViewController];
[controller setDetailItem:strPOIndex];
controller.navigationItem.leftBarButtonItem = self.splitViewController.displayModeButtonItem;
controller.navigationItem.leftItemsSupplementBackButton = YES;
}
}
我试图用它从我的主控制器将strPOIndex传递给我的细节控制器中的setDetailItem。。但当我运行此命令时,会出现一个错误:
-[LHPurchaseOrderMaster setDetailItem:]: unrecognized selector sent to instance 0x156cce80
我不明白为什么会发生这种情况,这是我的故事板的问题吗?还是我的主控制器或详细控制器?这是我的详细控制器:
.h:
主控制器:
h
#导入
#导入“ShinobiDataSource.h”
#导入“PopupGenerator.h”
@类LHPurchaseOrderDetail;
@界面LHPurchaseOrderMaster:UITableViewController
@属性(强,非原子)IBUIButton*communityBtn;
@属性(强,非原子)ibuibutton*lotBtn;
@属性(强,非原子)IBUIButton*goBtn;
-(iAction)社区B表示:(id)发件人;
-(IBAction)lotBtnPressed:(id)发送方;
-(iAction)已按下:(id)发送方;
@属性(非原子,保留)NSArray*tableData;
@属性(强,非原子)lPurchaseOrderDetail*purchaseOrderController;
@结束
您试图访问的属性似乎无法访问(检索到的对象错误)
你有没有试过使用而不是
LHPurchaseOrderDetail *controller = (LHPurchaseOrderDetail *)[[segue destinationViewController] topViewController];
差不多
LHPurchaseOrderDetail *controller = (LHPurchaseOrderDetail *)[[segue destinationViewController] viewControllers][0];
有时我也会遇到与您相同的问题。将您的
detailItem
设置为非NSString
。不是身份证问题就在这里
self.detailDescriptionLabel.text = [self.detailItem description];
在configureView
方法中,按如下所示更改代码:
- (void)configureView {
// Update the user interface for the detail item.
if (self.detailItem) {
self.detailDescriptionLabel.text = self.detailItem;
}
}
别忘了也要改变这个
- (void)setDetailItem:(NSString *)newDetailItem {
if (_detailItem != newDetailItem) {
_detailItem = newDetailItem;
// Update the view.
[self configureView];
}
}
您的错误是:
-[LHPurchaseOrderMaster setDetailItem:]: unrecognized selector sent to instance 0x156cce80
因此,似乎在lPurchaseOrderMaster
类中的某个地方,您试图访问并设置detailItem
属性,就好像它是lPurchaseOrderMaster
的一部分一样,但由于它不存在,因此出现了一个无法识别的选择器
错误
编辑
你应该检查三件事:
Interface Builder
中,检查从LHPurchaseOrderMaster
ViewController到UINavigationController
的序列是否将LHPurchaseOrderDetail
ViewController作为其堆栈中的第一个视图控制器嵌入[segue destinationViewController]topViewController]
返回的类名,如下所示:
id obj=[segue destinationViewController]topViewController];
NSLog(@“%@”、NSStringFromClass([obj类])代码>
LHPurchaseOrderDetail
。如果不是,那么你的故事板就有问题了,你肯定把情节连接错了
lPurchaseOrderMaster
类中是否有任何试图访问“detailItem”属性的代码,就好像它是此类的一部分一样您确定topViewController是LHPurchaseOrderDetail类型吗?尝试调试该行并查看返回的实际类型是什么您是否尝试过使用'lPurchaseOrderDetail*控制器=(lPurchaseOrderDetail*)[segue destinationViewController]<代码>!?你为什么要访问topViewController`属性?@luk2302我猜他正在访问topViewController属性,因为他的UIViewController嵌入在一个UINavigationController中,而segue是到那个navigationController的(因此是演员)。黑暗中的镜头太多了<代码>NSLog(@“目标vc%@,[segue destinationViewController])代码>然后
NSLog(@“目标vc%@”,[[segue destinationViewController]topViewController])代码>在这里发布结果。通过将destinationVC表达式的结果强制转换为显然不是的结果,代码显然是在冒险。@danh如果每个人都在呼救之前开始日志记录和调试,那就容易多了……不,如果无法访问,就会发生另一个错误!对不起,也许我表达得不对。对于“不可访问”,我指的是没有该属性或方法的对象。当你试图在一个没有该方法的对象中调用一个方法时,就会发生这种情况。好吧,这是肯定的,但这对解决问题没有帮助(顺便说一句,我不是那个投票反对你的人。)有时候我只是用那个方法解决了问题。我只是想帮忙。:)
- (void)configureView {
// Update the user interface for the detail item.
if (self.detailItem) {
self.detailDescriptionLabel.text = self.detailItem;
}
}
- (void)setDetailItem:(NSString *)newDetailItem {
if (_detailItem != newDetailItem) {
_detailItem = newDetailItem;
// Update the view.
[self configureView];
}
}
-[LHPurchaseOrderMaster setDetailItem:]: unrecognized selector sent to instance 0x156cce80