对象上找不到属性

时间:2014-08-15 16:07:38

标签: ios objective-c xcode

我有一个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

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
}