无可见@interface声明选择

问题描述:

我有一个SSLYFoodDetailViewController.h,其内容是无可见@interface声明选择

#import <UIKit/UIKit.h> 

@interface SSLYFoodDetailViewController : UIViewController 

@property(nonatomic, weak) NSString *foodItem; 
@property(nonatomic, weak) NSString *restaurantName; 

- (void) setFoodItem:(NSString *)foodItem; 
- (void) setRestaurantName:(NSString *)restaurantName; 

@end 

在另一个文件SSLYTableViewController.mprepareForSegue方法中,我尝试做以下 -

SSLYFoodDetailViewController *sslyFoodDetailViewController = [segue destinationViewController]; 
[sslyFoodDetailViewController setFoodItem:@"Pasta"]; 

Xcode是给我有一个错误,有No visible @interface for 'SSLYFoodDetailViewController' declares the selector 'setFoodItem'

SSLYTableViewController.m的顶部,我有import语句 -

#import "SSLYFoodDetailViewController.h" 

它是什么,我的思念?

+3

该错误消息意味着某个地方你没有参数调用'setFoodItem'河 – danielbeard

+1

1.你不需要声明setter: - (void)setFoodItem:(NSString *)foodItem; - (void)setRestaurantName:(NSString *)restaurantName; 2. XCode有时是一件讨厌的事情。尝试清理并构建甚至删除派生数据和/或退出XCode并重新启动。 顺便说一句:你确定你想要引用的属性很弱吗? –

+3

你为什么要声明这些属性“弱”? 'NSString'属性的最佳做法是将它们声明为'(非原子,复制)'。 – dasblinkenlight

这没有任何意义,但setFoodItem:隐含在foodItem @property声明中。

尝试删除头文件中setFoodItem:setRestaurantName:的声明 - 这肯定不会损害任何内容,因为它们是多余的。

如果不行,请尝试属性访问符号:

sslyFoodDetailViewController.foodItem = @"Pasta"; 

另外值得注意的是,你可能得到就行了警告:

SSLYFoodDetailViewController *sslyFoodDetailViewController = [segue destinationViewController]; 

您应该添加一个如下所示:

SSLYFoodDetailViewController *sslyFoodDetailViewController = (SSLYFoodDetailViewController *) [segue destinationViewController]; 
+0

谢谢。我尝试过,但那也没用。然后我删除了'SSLYFoodDetailViewController'(包括'.h'和'.m'文件)并重新创建它们。它的工作 - 也许XCode行为。我意识到我不需要明确地声明setter方法,现在它可以处理这个方法。 – Siddharth

+1

@Siddharth当我确定我做的一切正确时,我通常会尝试一个Project> Clean。 – paulrehkugler