@property不允许属性检索的简单类示例

时间:2014-02-08 05:30:09

标签: ios objective-c xcode ios7

我创建了一个Food对象,我希望能够设置和获取属性(例如time)。出于某种原因,我被允许设置属性,但我无法获取get属性。我只需致电food.time

即会收到以下错误消息
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

1 个答案:

答案 0 :(得分:3)

编译器知道food只是一个通用的NSObject指针。您需要将其强制转换为Food对象,或者只是在for循环中更改您的定义。

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

假设firstFood实际上是Food个对象,因为您没有在代码段中显示它的定义。

如果您不想更改类型,可以将任何消息发送到id,并在运行时让它弄清楚它是否有效:

foodLabel.text = [food time];

也有效,但是你无法在id类型的对象上使用点语法,无论是强制转换它还是使用标准括号语法(如果该对象没有,它将在运行时失败)回应那条消息)。