我有2个班。 A和B内ClassA的我有检索JSON数据,并添加到一个阵列的方法。 我要访问从ClassB的数组。 我怎样才能实现呢?
ClassA.h
- (void)viewDidLoad
{
//initialise arrayPlaces and arrayWeather
[super viewDidLoad];
dispatch_async(queue, ^{
NSData* data = [NSData dataWithContentsOfURL:
serverURL];
[self performSelectorOnMainThread:@selector(fetchedData:)
withObject:data waitUntilDone:YES];
});
}
- (void)fetchedData:(NSData *)responseData {
//parse out the json data
NSError *error;
NSMutableArray *tempArray = [[NSMutableArray alloc] init];
tempArray = [NSJSONSerialization
JSONObjectWithData:responseData //1
options:kNilOptions
error:&error];
//declare arrayPlaces
arrayToPass = [[NSMutableArray alloc] init];
//...codes to add array here using a loop...
[arrayToPass addObject:tempString];
}
在ClassB的,我有一个的tableView我想所有的ClassA从数组。 我怎样才能做到这一点?
ClassA *cA = [[ClassA alloc]init];
ClassA.view;
arrayReceived = ClassA.arrayToPass;
以上似乎并不在ClassB的实现时工作。
ClassB *cB = [[ClassB alloc] init];
[cB setArrayReceived:arrayToPass];
同样没有在这部分代码之后ClassA的实现时,这项工作。 “//...codes在这里添加使用循环阵列... [arrayToPass ADDOBJECT:tempString];
请帮忙!! 谢谢!
您的代码不工作的原因是因为fetchData:
是异步完成和arrayToPass
仍然没有填充当代码arrayReceived = ClassA.arrayToPass;
运行。
因此,我们必须让ClassB
知道这一点。 如何首先声明一个协议ClassADelegate
之间ClassA
和ClassB
,并在声明属性ClassA
那种类型的ClassADelegate
是这样的:
in ClassA.h
@protocol ClassADelegate ;//Forward declaration of the protocol
@interface ClassA {...
}
@property (nonatomic, assign) id <ClassADelegate> delegate;
@end
@protocol ClassADelegate <NSObject>
-(void) classADidReceiveData:(NSArray *)array;
@end
然后让ClassB
这个委托
@interface ClassB : <ClassADelegate> { ...
当然实现方法classADidReceiveData:
在ClassB的:
-(void)classADidReceiveData:(NSArray*) array{
arrayReceived = array;
}
然后修改fetchData:
这样的:
- (void)fetchedData:(NSData *)responseData {
...
//...codes to add array here using a loop...
[arrayToPass addObject:tempString];
//Call the delegate method if a delegate has been set
if(delegate){
[delegate classADidReceiveData:arrayToPass]
}
}
所以,当ClassA
接收到的数据,它可以使ClassB
注意到了这一点。
总的用法是:
ClassA *cA = [[ClassA alloc]init];
cA.delegate = self;
cA.view;
如果你在获取数据后做什么ClassB
,然后做在classADidReceiveData
在ClassB
。
-(void)classADidReceiveData:(NSArray *)array{
arrayReceived = array;
//Do whatever you want after receiving array
}
让A级的阵列的property
A级,那么你可以很容易地在B级访问
in Class A.h
@property (strong, nonatomic) NSMutableArray *tempArray;
in Class A.m
@synthesize tempArray;
然后获得A类的实例在B类,你可以访问tempArray
为class_a_object.tempArray
首先,必须有在类A中的阵列被声明作为成员变量。 而A类需要返回它(可以使用@synthesize如果它是一个@property)的方法。
现在,你有选择。 B类可具有的A的实例作为成员:那么它只是要求一种用于阵列(指针)。 B类可能是因为有人谁传递数组A和B两个或需要获得B的阵列可以通过人谁拥有B中的成员,因此可以访问B的阵列中调用的方法来实例化。
可能有更多的选择呢。
以一个阵列中应用delegate.Declare属性,并在应用delegate.And合成那么当你在A类,然后做这样的
写A类验证码
Appdelegate *app = (AppDelegate *) [[UIApplication sharedApplication] delegate];
app.somearray = self.yourarray;
在ClassB的你可以这样做。
Appdelegate *app =(AppDelegate *) [[UIApplication sharedApplication] delegate];
NSLog(@"arr is %@",app.somearray);