Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
初学者:在iOS中存储阵列数据_Ios_Objective C_Arrays - Fatal编程技术网

初学者:在iOS中存储阵列数据

初学者:在iOS中存储阵列数据,ios,objective-c,arrays,Ios,Objective C,Arrays,这是一个非常简单的问题,但我对编程了解不够,甚至不知道如何提问 我遵循一个基本的初学者教程,创建一个iOS应用程序,但为个人项目修改它。它让我在视图控制器中定义并存储数据数组,如下所示: Station *station001 = [Station new]; station001.name = @"Station 1 Name"; station001.thumbnail = @"station1thumbnail.png"; Station *station002 = [Station n

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

我遵循一个基本的初学者教程,创建一个iOS应用程序,但为个人项目修改它。它让我在视图控制器中定义并存储数据数组,如下所示:

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中的单个外部文件访问我的数据


感谢您的帮助,请原谅这个问题是多么的基本和明显

下面是一个使用singleton模式启动的类的示例。在DataManager类中,我有一个类方法来创建共享实例,还有一个实例方法来返回站点数组(我还创建了一个Station类,它有一个initWithName:thumbnail:method来创建站点)


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

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

您的属性列表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 * name = [dict valueForKey:@"name"]; // returns 'station name 1'
NSString * thumbnail = [dict valueForKey:@"thumbnail"];

您可以开始筛选或对plist的内容执行任何操作。

思考视图控制器如何知道他们需要什么数据以及如何对它们进行排序。然后确保数据数组具有视图控制器可用于筛选数据和对数组排序的属性。或者,只需多花一点时间了解核心数据,并将其坚持下去;无论如何,最终你需要使用一个真正的持久性机制;您最好现在就开始。是否需要这些数据在应用程序启动之间保持不变?如果不是,则不应使用属性列表、核心数据或NSUserDefaults来存储阵列。您可能应该创建一个创建数组的单例类,每个控制器都可以访问该数组,然后根据需要进行筛选和重新排序。@Abizern,不,我说过如果他不需要持久化数据,他不应该使用任何这些方法在控制器之间共享数据。我建议,因为OP是初学者,在编写基础的初学者教程时,他最好先使用plists来保存数据。核心数据很好,但请记住,你已经做了很多年了。如果你想尝试使用singleton,你所要做的就是用谷歌搜索这个术语,你会被大量的例子淹没。但是我鼓励你不要依赖于单例编程风格——这个概念有它的用处,但是很容易让它从你身边溜走,左右使用单例,造成一个难以理解的全局状态的噩梦。我认为没有必要为这个问题创建共享实例。简单的属性列表会更简单,并且仍然允许控制器每次访问相同的数据。
<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"];