2013-12-11 59 views
0

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

回答

0

這沒有任何意義,但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

相關問題