在不同的UIViewControllers之间共享NSArray

时间:2012-05-11 08:09:33

标签: objective-c ios cocoa-touch uiviewcontroller

我正在创建一个使用webService以JSON格式获取数据的应用程序...我将数据解析为对象NSArray ...我使用它...它工作正常...
现在,如果用户点击一个按钮,我需要将他发送到另一个Uiview ...其中包含有关被点击对象的更多数据..
问题在这里......我不想再次请求并从服务器下载结果...因为我已经做了...我想要的就是访问我在第一个UIViewController中的NSArray。

5 个答案:

答案 0 :(得分:1)

您可以在AnotherView.h上添加另一个属性:

@property (nonatomic, retain) NSArray *jsonData;

在AnotherView.m上合成它。当您打算从InitialView调用AnotherView时,可以使用在InitialView上检索的数据设置jsonData。

答案 1 :(得分:0)

在其他视图控制器中创建自定义初始值设定项,如下所示:

#import <UIKit/UIKit.h>

@interface OtherViewController : UIViewController 

@property (nonatomic, strong) NSArray *myArray;

- (id)initWithArray:(NSArray *)anArray;

@end

然后像这样实现它:

#import "OtherViewController.h"

@implementation OtherViewController
@synthesize myArray=_myArray;

- (id)initWithArray:(NSArray *)anArray {
    if (!(self = [self initWithNibName:@"OtherViewController" bundle:nil]))
        return nil;

    if (!anArray) {
        @throw [NSException exceptionWithName:@"OtherViewControllerBadInitCall" reason:@"array is nil" userInfo:nil];
    }

    _myArray = anArray;


    return self;
}

//...
@end

然后你可以像这样初始化和显示你的控制器:

OtherViewController *otherViewController = [[OtherViewController alloc] initWithArray:greatJSONArray];
[self.navigationController pushViewController:otherViewController animated:YES];

你去。

答案 2 :(得分:0)

您可以将数组设置为属性。您可以创建一个新类并将该数组设置为该属性,并在获取该数组后设置该属性。或者,您可以创建现有UIVIewController类的属性并传递该对象。

无论哪种方式,你都必须设置属性。

答案 3 :(得分:0)

您可以在第二个ViewController中定义一个新属性,该属性包含NSArray并在显示之前将firt数组传递给第二个ViewController。

答案 4 :(得分:0)

您还没有概述是向前还是向后发送数据。在后一种情况下,您将需要实现协议和委托(定义您自己的协议),但对于先前的情况,您只需要在任何其他类中创建要访问的Object的属性。对于Web服务,如果您遵守MVC体系结构的规范,最好使用协议和委托。