请求成员名称不是结构或联盟

时间:2010-12-27 22:46:47

标签: objective-c xcode

我试图在我的应用程序中调用webservices并在控制台中检查它时显示对象的数量(我正在使用可变数组),然后在尝试显示对象的名称时(此处对象是location),它在这一行给我一个错误:

for (SDZArrayOfLocationWithLatestGrades* location in a) {

NSLog(@" - %@", location.Name); // error here and a is the mutable array

}

这是类SDZArrayOfLocationWithLatestGrades

@implementation SDZArrayOfLocationWithLatestGrades

+ (id) newWithNode: (CXMLNode*) node
{
    return [[[SDZArrayOfLocationWithLatestGrades alloc] initWithNode: node] autorelease];
}

- (id) initWithNode: (CXMLNode*) node
{
    if(self = [self init]) {
        for(CXMLElement* child in [node children])
        {
            SDZLocationWithLatestGrades* value = [[SDZLocationWithLatestGrades newWithNode: child] object];
            if(value != nil) {
                [self addObject: value];
            }
        }
    }
    return self;
}

+ (NSMutableString*) serialize: (NSArray*) array
{
    NSMutableString* s = [NSMutableString string];
    for(id item in array) {
        [s appendString: [item serialize: @"LocationWithLatestGrades"]];
    }
    return s;
}

@end

3 个答案:

答案 0 :(得分:1)

在第一行SDZArrayOfLocationWithLatestGrades表示您的位置对象是一个数组,当然没有Name属性。我怀疑你的意思是别的。

答案 1 :(得分:1)

点语法,至少使用它的方式(即.Name)是1)C代码,用于访问C结构或C联合中的变量。确保数组a的内容是具有名为Name的属性的C结构(或联合),或2)用于访问类实例的合成属性的Objective-C代码。

这就是为什么其他人要求SDZArrayOfLocationWithLatestGrades的定义,它需要有一个名为Name的属性。

从变量名称(SDZArrayOfLocationWithLatestGrades)推断,听起来这是一个数组。如果SDZArrayOfLocationWithLatestGrades是包含具有属性Name的结构的数组,那么您使用的是快速枚举错误。

for (SDZArrayOfLocationWithLatestGrades* location in a)

在上面你要说的是,驻留在a中的变量是SDZArrayOfLocationWithLatestGrades *类型,这可能是错误的(除非你将数组存储在数组中)。您需要将SDZArrayOfLocationWithLatestGrades *替换为您在数组a中存储的变量类型。

错误的解释......但希望它有所帮助。

答案 2 :(得分:0)

SDZArrayOfLocationWithLatestGrades类似乎没有Name属性。这就是您无法访问它的原因。也许您打算使用 SDZArrayOfLocationWithLatestGrades中包含的对象的类型?