Objective-C:在类型对象上找不到属性

时间:2015-02-22 18:03:27

标签: objective-c

所以我对Objective-C很新,我试图扩展我从课本中制作的工作程序。

所以,我有一个工人阶级名称"项目"。这是Item.h:

@interface Item : NSObject

{
    NSString *_itemName;
    NSString *_serialNumber;
    int _valueInDollars;
    NSDate *_dateCreated;
}

+(instancetype)randomItem;

它有一些函数可以操作这些变量,以服装方式初始化它们并以格式化方式打印它们。

然后我做了一个"项目"叫"容器"。我希望它类似于" Item"但是有一个NSMUtableArray变量,它可以包含一个" Item"的数组。这是Container.h:

#import "Item.h"

@interface Container : Item

{
    NSString *_containerName;
    NSDate *_containerDatecreated;
    int _containerValueinDollars;
    NSMutableArray *_subItems;
}

+(instancetype) randomContainer;

现在在我的主要。我用" Item"做了很多事情。上课,他们工作正常。但是当我这样做时:

Container *container=[Container randomContainer];
        for (NSString *item in container.containerName) {
            NSLog(@"%@", item);
        }

它表示" Property' containerName'没有找到类型'容器*'"的对象。但我明确地将该变量添加到了#34; Container"子类。

注意:randomContainer创建一个随机容器实例并对其进行初始化。当我在Xcode中调试它似乎工作正常。

我的问题是什么?

1 个答案:

答案 0 :(得分:1)

container.containerName称为点语法。它相当于[container containerName]。但是你的类没有名为containerName的属性或方法,所以编译器抱怨。

现在,在你正在使用的书的背景下,这可能完全令人困惑。那是因为你正在使用的书已经过时了。

如果它是最新的,您的Item类看起来更像:

@interface Item:NSObject
@property(copy) NSString *containerName;
@property(copy) NSDate *containerDateCreated;
@property(assign) NSInteger containerValueInDollars;
... etc ...
@end

在学习其他内容之前,先获取最新的教程和/或书籍。它会节省很多挫折感。