Iphone 从类解析未声明的契约(第2部分)

Iphone 从类解析未声明的契约(第2部分),iphone,xcode,Iphone,Xcode,我想在一个类中创建并填充一个数组,然后在主程序中使用数组中的内容。。。作为一个例子,我将使用美国各州的名单 这是对原始问题的更新,已经解决了一半,并且为了清晰起见已经满足了,因此您可以正确地查看代码 阵列状态 #import <Foundation/Foundation.h> @interface ArrayStates : NSObject @end 这是上一个问题中更新的代码,但它仍然在实现行上生成一个缺失的结束错误,void需要一个错误。在方法原型之后,仍然无法在主程序中引用

我想在一个类中创建并填充一个数组,然后在主程序中使用数组中的内容。。。作为一个例子,我将使用美国各州的名单

这是对原始问题的更新,已经解决了一半,并且为了清晰起见已经满足了,因此您可以正确地查看代码

阵列状态

#import <Foundation/Foundation.h>
@interface ArrayStates : NSObject
@end
这是上一个问题中更新的代码,但它仍然在实现行上生成一个缺失的结束错误,void需要一个错误。在方法原型之后,仍然无法在主程序中引用对象


我相信,如果接口和实现区分了数组是可以在类内访问还是在类外访问(这要感谢iHungry)。

在viewDidLoad方法中,必须首先调用super。
顺便说一下,您的ArrayStates类是NSObject的一个子类,因此不会调用其方法viewDidLoad

在viewDidLoad方法中,必须首先调用super。
// in ArrayStates.h
@interface ArrayStates : NSObject
@property NSMutableArray *listOfStates;
@end

// in ArrayStates.m
@implementation ArrayStates
@synthesize listOfStates;
//...
-(void)viewDidLoad {
    [super viewDidLoad];
    listOfStates = [[NSMutableArray alloc] init];
}
@end

// in some other class
ArrayStates *states = [[ArrayStates alloc] init];
NSLog(@"%@", states.listOfStates);

顺便说一下,您的ArrayStates类是NSObject的一个子类,因此不会调用其方法viewDidLoad

创建一个像Mundi在.h中所说的属性,然后在需要访问数组的地方导入ArrayStates.h。然后,您可以创建类ArrayStates的实例(创建一个对象和alloc init),然后使用该对象访问其listOfStates属性。

创建一个类似于.h中Mundi所说的属性,然后在需要访问数组的地方导入ArrayStates.h。然后,您可以创建一个类ArrayStates的实例(创建一个对象和alloc init),然后使用该对象访问其listOfStates属性。

Fantastic-这消除了ArrayStates中更常见的错误,但我仍然无法访问主程序中的listOfStates。我已将#import“ArrayStates.h”包含在文件的顶部。您必须初始化数组。您需要一个“ArrayStates”的实例(带有alloc init),然后您可以访问它的属性。必须在.h文件中声明可从外部访问的属性。查看edit.fantactive-这消除了ArraySates中更漂亮的错误,但我仍然无法访问主程序中的状态列表。我已将#import“ArrayStates.h”包含在文件的顶部。您必须初始化数组。您需要一个“ArrayStates”的实例(带有alloc init),然后您可以访问它的属性。必须在.h文件中声明可从外部访问的属性。查看编辑。不幸的是,编译器不喜欢[super viewDidLoad];行并给出一个“NSObject”的不可见接口声明选择器“viewDidLoad”。是否需要将“@”属性和“@”合成添加到ArrayStates?根据之前的建议,我被告知该类很好,但它仍然不能与未找到的listOfStates一起工作……这是重点,因此我需要将其作为tableview控制器的子类?在您的情况下,您可以使用init方法而不是viewDidLoad方法填充数组。不幸的是,编译器不喜欢[super viewDidLoad];行并给出一个“NSObject”的不可见接口声明选择器“viewDidLoad”。是否需要将“@”属性和“@”合成添加到ArrayStates?根据之前的建议,我被告知该类很好,但它仍然不能与listOfStates一起工作,未找到…重点是,所以我需要将其作为tableview控制器的子类?在您的情况下,您可以使用init方法而不是viewDidLoad方法填充数组。完成后,我想知道链接应该是什么。非常感谢。完成后,我想知道链接应该是什么。非常感谢。
// in ArrayStates.h
@interface ArrayStates : NSObject
@property NSMutableArray *listOfStates;
@end

// in ArrayStates.m
@implementation ArrayStates
@synthesize listOfStates;
//...
-(void)viewDidLoad {
    [super viewDidLoad];
    listOfStates = [[NSMutableArray alloc] init];
}
@end

// in some other class
ArrayStates *states = [[ArrayStates alloc] init];
NSLog(@"%@", states.listOfStates);