1

我有一个辅助类,它有一个函数,可以进行 api 调用并获取一些 json 数据和格式并返回一个数组。我的 TableViewController 正在尝试访问该返回的数组。是的,正如您所料,我的 tableviewcontrollerviewDidLoad方法无法访问我的助手类返回的数组对象。

@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);
}
}

我的问题是,我是否需要实现一个委托来传递数据,或者有没有其他方法可以将数据传递给我的视图控制器?

PS:我不想使用全局变量

4

2 回答 2

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 实施。

于 2013-04-15T12:25:54.703 回答
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.

}

我希望我足够详细。我希望这可以帮助某人并避免很多头痛。

于 2013-04-17T20:40:58.700 回答