我有一个textToAnalyze类和一个xyzviewcontroller。下面的代码在我的xyzviewcontroller中。我收到一个错误:" property" textToAnalyze"在id"类型的对象上找不到。我可以用两种方式解决这个问题。但我不知道我收到此错误的原因。
segue.destinationViewController.TextToAnalyze = self.body.textStorage; //which will get error
TextStatsViewController *tsvc=(TextStatsViewController *)segue.destinationViewController; // solution 1
tsvc.TextToAnalyze=self.body.textStorage;
[segue.destinationViewController setTextToAnalyze:self.body.textStorage]; //solution 2
答案 0 :(得分:2)
您遇到此错误的原因是segue.destinationViewController
返回对象的id类型,并且该对象上没有TextToAnalyze属性。您提供的解决方案是将视图控制器转换为自定义xyzviewcontroller。
你告诉编译器这个对象是(TextStatsViewController *)和编译器知道这个对象包含这个属性。
答案 1 :(得分:0)
正如Greg所说,问题是segue.destinationViewController
id
类型,没有名为TextToAnalyze
的属性。
您的两种解决方案都可以解决错误。解决方案#1在风格上更正确,因为它会告诉未来的读者你的代码在这里你期望哪个类。
请注意,如果segue.destinationViewController
不是TextStatsViewController
(或其他具有TextToAnalyze
属性的类),则这两种解决方案都会导致运行时错误。
为了避免这种潜在的未来错误,您可能希望在运行时检查该类:
if ([segue.destinationViewController isKindOfClass:[TextStatsViewController class]]) {
// segue.destinationViewController is guaranteed to be a TextStatsViewController
TextStatsViewController *tsvc = (TextStatsViewController *)segue.destinationViewController;
tsvc.TextToAnalyze = self.body.textStorage;
} else {
// It's some other class
}