How to use a Class so that data is accessible in multiple views?
我是Objective-C的新手,我试图找到使项目中所有视图均可使用的"记录数组"的最佳方法。
我已经有一个Singleton,并且我读到我应该创建一个Class作为我的"记录"。
以该线程为例:如何创建嵌套数组或多维数组
因此,如果我创建一个Class实例数组,是否应该在现有的Singleton中将该数组声明为NSMutableArray,还是有更好/更干净的方法来实现相同的目标?
如果要在多个视图中访问相同的数据,则可能需要查看CoreData。与更轻量级的单例方法相比,它有点麻烦,但从长远来看,您可能会发现它节省了时间。 Apple提供了一些类来以视图的形式在表中显示数据,并且网络上有很多帮助。
我了解您正在使用Stephen Darlington在此链接上指出的方法如何创建嵌套数组或多维数组。
所以我假设您正在创建一个记录类。如果您确实想编写更少的代码,那么为什么不使用NSDictionary / NSMutableDictionary来创建新类(records类)来处理记录呢?
单例类已经具有NSMutable数组。此数组将用于存储字典。
1)将信息保存到词典中-每当一个类(已访问该单例)要存储信息时,例如说姓名,年龄,性别。
他们要做的就是:
1 2 3 4 5 6 7 8 | NSString *personName = @"Bob"; NSString *personAge = @"25"; NSString *personSex = @"male"; NSMutableDictionary *myDict = [[NSMutableDictionary alloc] init]; [myDict setObject:personName forKey:@"name"]; [myDict setObject:personAge forKey:@"age"]; [myDict setObject:personSex forKey:@"sex"]; |
然后将该字典添加到单例类中的NSMutableArray中,以使单例中包含一个Dictionary数组。词典将易于管理数据。您可以使用for循环或其他方法遍历单例中的数组,然后在找到所需的Dictionary时,可以访问/比较/删除/添加/添加任何内容。查看《 NSDictionary参考》和《 NSMutableDictionary参考》,以查看可在"词典"上使用的方法列表。使用字典应该节省您的编码时间,而不是在记录类中创建与字典中已经实现的相同的方法。
您可以创建一个数据控制器单例类,并像Apple在其自己的框架中一样使用它。这是单例数据控制器类的示例。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | // MyDataController.h #import <Foundation/Foundation.h> @interface MyDataController : NSObject @property (nonatomic, retain) NSMutableArray *data; +(MyDataController*)sharedController; @end // MyDataController.m #import"MyDataController.h" MyDataController *__dataController; @implementation MyDataController @synthesize data; -(id)init { self = [super init]; if (self) { data = [NSMutableArray new]; } return self; } +(MyDataController*)sharedController { if (__dataController == nil) { __dataController = [MyDataController new]; } return __dataController; } @end |
在此类中,iVar
1 | [[MyDataController sharedController] data]; |
要调用此单例,您需要在每个要从中访问它的类中
1 2 3 4 5 6 7 8 9 10 11 | #import <Availability.h> #ifndef __IPHONE_4_0 #warning"This project uses features only available in iOS SDK 4.0 and later." #endif #ifdef __OBJC__ #import <UIKit/UIKit.h> #import <Foundation/Foundation.h> #import"MyDataController.h" #endif |
通过将此方案用于Objective-C单例,可以为您的班级添加其他便捷方法。单例将保留对自己类型的一个对象的引用,这意味着可以将任何其他变量声明为实例变量,而不是将其声明为类变量。