初学者:在iOS中存储数组数据

时间:2013-09-12 14:37:16

标签: ios objective-c arrays

这是一个非常简单的问题,但我对编程知之甚少,甚至不知道如何提问。

我正在关注创建iOS应用程序的基本初学者教程,但是要为个人项目修改它。它让我在View Controller中定义和存储数据数组:

Station *station001 = [Station new];
station001.name = @"Station 1 Name";
station001.thumbnail = @"station1thumbnail.png";

Station *station002 = [Station new];
station002.name = @"Station 2 Name";
station002.thumbnail = @"station2thumbnail.png";

...

Station *station120 = [Station new];
station120.name = @"Station 120 Name";
station120.thumbnail = @"station120thumbnail.png";

stations = [NSArray arrayWithObjects:station001, station002, ... station 120, nil];

这很好,我理解如何在这种形式下使用它。但是,通过我的应用程序,我有多个视图控制器访问同一个数据列表。那些其他视图控制器只需要某些工作站,但需要以不同的顺序排列它们。

我想假设有一种方法来存储数据的前半部分(创建新的'Station'),以便View Controllers可以访问相同的数据,并在各自的视图控制器中创建它们的数组排序。但是,我似乎无法找到任何有关如何创建这样的外部文件的帮助(所以我假设它不是最​​好的方法)。

我见过的所有教程都使用了属性列表,核心数据,NSUserDefaults和其他方法,但这些似乎并没有解释如何只提取某些数据并将其排列在一种特殊的方式,取决于它所在的视图控制器。

作为基本的下一步,我想知道多个视图控制器从XCode中的单个外部文件访问我的数据的方法。

任何帮助表示赞赏,请原谅我的问题是多么基本且可能很明显!

2 个答案:

答案 0 :(得分:0)

对于遇到这个问题的其他人。

如果您需要访问多个控制器上的相同阵列列表,您可以使用属性列表,然后只需将其加载到您需要的每个控制器上。

你的属性列表xml文件可能有这样的东西

<dict>
    <array>
     <dict>
      <key>name</key>
      <string>station 1 name</string>
      <key>thumbnail</key>
      <string>stationthumbnail</string>
     </dict>

      <dict>
      <key>name</key>
      <string>station 1 name</string>
      <key>thumbnail</key>
      <string>stationthumbnail</string>
     </dict>

    </array>
 </dict>

加载属性列表

NSString * plistPath = [[NSBundle mainBundle] pathForResource:@"nameOfPlistFile" ofType:@"plist"];
NSArray* pl =[[NSArray alloc] initWithContentsOfFile:plistPath];
NSDictionary * dict = [[NSDictionary alloc]initWithDictionary:[pl objectAtIndex:0]];

获取字典值

NSString * name = [dict valueForKey:@"name"]; // returns 'station name 1'
NSString * thumbnail = [dict valueForKey:@"thumbnail"];

您可以使用plist的内容开始过滤或做任何您想做的事情。

答案 1 :(得分:-1)

以下是使用单例模式开始的类的示例。在DataManager类中,我有一个用于创建共享实例的类方法和一个用于返回工作站数组的实例方法(我还创建了一个具有initWithName的Station类:thumbnail:用于创建工作站的方法)。

@interface DataManager : NSObject

@property (strong,nonatomic) NSArray *stations;

+(DataManager*)sharedInstance; 



@implementation DataManager

+(DataManager*)sharedInstance {
    static DataManager* sharedInstance = nil;
    static dispatch_once_t once;
    dispatch_once(&once, ^{ sharedInstance = [[self alloc] init];
    });
    return sharedInstance;
}

-(NSArray *)stations {
    if (! _stations) {
        NSMutableArray *arr = [NSMutableArray new];
        for (int i=1; i<121; i++) {
            NSString *name = [NSString stringWithFormat:@"Station %d Name",i];
            NSString *thumb = [NSString stringWithFormat:@"station%dthumbnail.png",i];
            Station *aStation = [[Station alloc] initWithName:name thumbnail:thumb];
            [arr  addObject:aStation];
        }
        _stations = [NSArray arrayWithArray:arr];
    }
    return _stations;
}

然后,您可以在任何其他类中访问此数组,如下所示:

DataManager *dm = [DataManager sharedInstance];
NSArray *stationArray = dm.stations;