1

这是一个非常简单的问题,但我对编程的了解还不够,甚至不知道如何问它。

我正在遵循一个基本的初学者教程来创建一个 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];

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

我想假设有一种方法可以存储数据的前半部分(创建新的“站”),以便视图控制器都可以访问相同的数据,并在各自的视图控制器中创建它们的数组排序。但是,对于如何创建这样的外部文件,我似乎找不到任何帮助(所以我假设这不是解决这个问题的最佳方法)。

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

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

任何帮助表示赞赏,请原谅这个问题是多么的基本且可能是显而易见的!

4

2 回答 2

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 的内容做任何您想做的事情。

于 2014-07-11T16:47:56.953 回答
-1

下面是一个使用单例模式帮助您入门的类示例。在 DataManager 类中,我有一个类方法来创建共享实例和一个实例方法来返回站点数组(我还创建了一个 Station 类,它具有一个 initWithName: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;
于 2013-09-12T16:44:28.930 回答