无可见@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.m
的prepareForSegue
方法中,我尝试做以下 -
SSLYFoodDetailViewController *sslyFoodDetailViewController = [segue destinationViewController];
[sslyFoodDetailViewController setFoodItem:@"Pasta"];
Xcode是给我有一个错误,有No visible @interface for 'SSLYFoodDetailViewController' declares the selector 'setFoodItem'
。
在SSLYTableViewController.m
的顶部,我有import语句 -
#import "SSLYFoodDetailViewController.h"
它是什么,我的思念?
这没有任何意义,但setFoodItem:
隐含在foodItem @property
声明中。
尝试删除头文件中setFoodItem:
和setRestaurantName:
的声明 - 这肯定不会损害任何内容,因为它们是多余的。
如果不行,请尝试属性访问符号:
sslyFoodDetailViewController.foodItem = @"Pasta";
另外值得注意的是,你可能得到就行了警告:
SSLYFoodDetailViewController *sslyFoodDetailViewController = [segue destinationViewController];
您应该添加一个如下所示:
SSLYFoodDetailViewController *sslyFoodDetailViewController = (SSLYFoodDetailViewController *) [segue destinationViewController];
谢谢。我尝试过,但那也没用。然后我删除了'SSLYFoodDetailViewController'(包括'.h'和'.m'文件)并重新创建它们。它的工作 - 也许XCode行为。我意识到我不需要明确地声明setter方法,现在它可以处理这个方法。 – Siddharth
@Siddharth当我确定我做的一切正确时,我通常会尝试一个Project> Clean。 – paulrehkugler
该错误消息意味着某个地方你没有参数调用'setFoodItem'河 – danielbeard
1.你不需要声明setter: - (void)setFoodItem:(NSString *)foodItem; - (void)setRestaurantName:(NSString *)restaurantName; 2. XCode有时是一件讨厌的事情。尝试清理并构建甚至删除派生数据和/或退出XCode并重新启动。 顺便说一句:你确定你想要引用的属性很弱吗? –
你为什么要声明这些属性“弱”? 'NSString'属性的最佳做法是将它们声明为'(非原子,复制)'。 – dasblinkenlight