2014-02-08 23 views
0

我創建了一個Food對象,我希望能夠設置和獲取屬性(如time)。出於某種原因,我被允許設置屬性,但我無法獲得get屬性。我簡單地調用food.time簡單的類示例@property不允許屬性檢索

Property 'time' not found on object of type 'conts __strong id' 

我不知道,如果問題是把它在,然後從一個數組中檢索,或者如果它是我的對象類是如何定義收到以下錯誤。在這個例子中,我簡化了它,以便您可以看到我如何使用它。

有些控制器(與其他方法這裏沒有顯示)

#import "Food.h" 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    NSArray *foodArray = @[firstFood]; 
    for (id food in foodArray) { 
     UILabel *foodLabel = [[UILabel alloc] 
           initWithFrame:CGRectMake(10, 180, self.view.frame.size.width-20, 50)]; 
     foodLabel.backgroundColor = [UIColor clearColor]; 

     foodLabel.text = food.time; // This line causes error 

     foodLabel.textColor = [UIColor blackColor]; 
     [foodLabel setFont:[UIFont fontWithName:@"Courier" size:14]]; 
     [self.view addSubview:foodLabel]; 
    } 
} 

Food.h

#import <Foundation/Foundation.h> 

@interface Food : NSObject 

@property (strong, nonatomic) NSString *time; 
@property (strong, nonatomic) NSString *title; 
@property (strong, nonatomic) NSString *description; 
@property (strong, nonatomic) NSString *place; 

@end 

Food.m

#import "Food.h" 

@implementation Food 

@end 
+0

你需要在這裏輸入一個類型foodLabel.text =(Food *)food.time; – Pawan

回答

3

至於編譯器知道food只是一個通用的NSObject指針。您可能需要將其轉換爲Food對象,或者只是在for循環內更改您的定義。

for (Food *food in foodArray) { 
    //...etc 
} 

這是假設firstFood實際上是一個Food對象,因爲你不顯示它在你的代碼段定義。

如果你不想改變的類型,你可以發送任何消息ID,並讓它在運行時是否有效弄清楚:

foodLabel.text = [food time]; 

也將是有效的,但您無法在類型爲id的對象上使用點語法,可以對其進行強制轉換,也可以使用標準括號語法(如果該對象不響應該消息,則在運行時會失敗)。

+0

美麗。儘管我是iOS開發新手,這是更公約嗎? –

+0

我想說我寫的第一件事是最常規的。使用點語法通常是在訪問屬性時的慣例,但是如果您正在做一些沉重的反射,底層語法可能會更有意義。我會說你的情況只是做演員,這樣編譯器可以幫助你。 –