我有一个辅助类,它有一个函数可以进行api调用并获取一些json数据和格式并返回一个数组。我的TableViewController正在尝试访问返回的数组。是的,正如您所料,我的tableviewcontroller viewDidLoad
方法无法访问我的帮助程序类返回的数组对象。
@interface MyHelperClass : NSObject
@property (nonatomic,retain)NSArray *myArray;
@end
@implementation MyHelperClass
@synthesize myArray;
- (NSArray *) returnArray{
// make api calls and return array
return myArray;
}
@end
@implementation MyTableViewController
{
- (void)viewDidLoad
{
[super viewDidLoad];
MyHelperClass *myhelper = [[MyHelperClass alloc]initWithPath:getSpacePath];
allTopics = (NSArray *)[myhelper returnArray];
NSLog(@"Load my Array%@",allTopics);
}
}
我的问题是,我是否需要实现委托来传递数据,还是有其他方法将数据传递给我的视图控制器?
P.S:我不想使用全局变量
答案 0 :(得分:1)
此代码是否会给您任何警告?
您正试图从NSArray *
返回方法返回void
。
将其修改为
- (NSArray *) returnArray{ // YOU CAN RETURN id AS WELL, AS YOU ARE TYPE CASTING THE RESULT AT CALLING TIME
// make api calls and return array
NSLog (@"myArray :: %@", [myArray description]); // Post the output back here
return myArray;
}
如果问题仍然存在,请告诉我。
在
处设置断点allTopics = (NSArray *)[myhelper returnArray]; // AT - (void)viewDidLoad
和
return myArray; // AT HelperClass method
如果第一个被解雇,那么你必须在评论中建议@ A-Live。
答案 1 :(得分:0)
很抱歉这么晚才发布答案。我弄清楚问题是什么。正如@ A-Live所提到的,使用AFNetworking的Rest API调用正在使用异步调用,因此它不会在其执行时间内将数组返回到主线程。就我而言,
-(void)viewDidLoad {
NSLog(@"I get called first");
MyHelper *helper = [[MyHelper alloc]init];
// returns array. However, [helper getData] is an async call under the hood. Hence myArray is nil
myArray = [helper getData];
}
为了解决这个问题,我利用了NSNotification。
@implementation MyHelper{
-(NSArray *)getData(){
[[NSNotificationCenter defaultCenter] postNotificationName:@"some.name.notification" object:JSON];
}
}
-(void)viewDidLoad(){
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loadData:) name:@"some.name.notification" object:nil];
}
-(void)loadData:(NSNotification *)notif {
// You can access the JSON object passed by the helper in here
NSArray *myArray = [notif object];
// do whatever you want with the array.
}
我希望我足够详细。我希望这可以帮助某人并节省很多头痛。