在nsobject和viewcontroller之间传递数据的最佳方法

时间:2013-04-15 12:19:45

标签: ios objective-c afnetworking viewcontroller nsobject

我有一个辅助类,它有一个函数可以进行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:我不想使用全局变量

2 个答案:

答案 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.

}

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