从另一个类访问数组
我有一个名为客户端的数组,我的一个类中,我想在另一个类中使用该数组中的信息。我已经建立了属性,并在我的第一堂课中合成了这个数组。我的第一个类的代码是从另一个类访问数组
@synthesize client;
...
- (IBAction)testing:(id)sender {
NSString *textContent = myTextView.text;
textContent = [textContent stringByReplacingOccurrencesOfString:@" " withString:@""];
client = [textContent componentsSeparatedByString:@"."];
NSLog(@"%@", client);
}
在我试图导入.h文件我的第一个类,然后只需访问该阵列我的第二类。我使用的代码是
- (IBAction)ButtonStuff:(id)sender {
ArrayManipulationViewController *myClass = [[ArrayManipulationViewController alloc]init];
NSLog(@"Second Interface");
NSArray *test = myClass.client;
NSLog(@"%@", test);
}
从多个类访问对象,常用的方法是声明在父类的对象,然后通过该对象的共享实例为需要访问的所有子类。例如,您可以在AppDelegate中声明该数组,并在您的子类中设置数组属性,并将该数组的实例从AppDelegate传递给所有子类。例如:在您的应用程序委托中创建一个NSArray(myArray),然后在AppDelegate植入中,使用属性将myArray实例传递给您的子视图控制器。
或者,如果您愿意的话;您可以在第一个类中声明该数组,然后使用属性将数组实例从第一个类传递到第二个类。然后,由于INSTANCE是相同的,所以您的第二课中所做的任何更改都将在您的第一课中提供。
UPDATED ANSWER: 对于第二种方法,最好在第一个类实现中声明数组,然后在实例化第二个类时,使用属性将数组实例传递给第二个类。在这个例子中,你需要有一个NSArray财产在你的第二类能够通过使用[secondClassInstance setClient: client];
你的第二类接口在它的阵列可能是这样的:
@interface SecondClass : NSObject
{
NSArray *client;
}
@property (nonatomic, retain) NSArray *client; // don't forget to synthesize
@end
然后,在你的第一课,你可以做以下事情来传递你的数组实例:
NSArray *client = [[NSArray alloc] initWithObjects:@"Object 1", @"Object 2"];
//...
SecondClass *secondClass = [[SecondClass alloc] init];
[secondClass setClient: client]; // passing the original client instance here
// don't forget to release secondClass instance when finished
对于我想要做的第二种方法,你谈到了阵列将是相同的是我想要的。我试图使用属性,但我仍然是新的Objective C和Xcode,所以我不认为我做对了。你能否详细说明一下如何做到这一点? – Dravus 2012-08-07 15:00:08
我已经更新了我的答案。希望这对你更有用,Dravus。 – TeaPow 2012-08-07 16:59:41
好吧,我尝试了所有这一切,当我在第二课中做了一个NSLog的数组,它说空。但是,当我在第一个类中执行NSLog时,它会正确地打印出阵列。我不知道我做错了什么,如果你需要我的代码中的任何内容,请让我知道。 – Dravus 2012-08-07 17:21:54
很难从你写的内容确定,但认为'alloc'创建一个新的对象...也就是说,与以前完全不同的,也不知道的关于你在之前存储的内容。 – 2012-08-07 14:43:35