我是Objective-C的新手,我正在尝试找出使项目中所有视图都可以使用“记录数组”的最佳方法。
我已经有了一个Singleton,而且我已经读过我应该创建一个Class作为我的'记录'。
请参阅此主题作为示例:How to create nested array or multidimensional array
因此,如果我创建一个Class实例数组,我应该在现有的Singleton中将数组声明为NSMutableArray,还是有更好/更清晰的方法来实现相同的目标?
答案 0 :(得分:0)
您可以创建一个数据控制器单例类,并像在自己的框架中一样使用它。以下是单例数据控制器类的示例。
// 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 data
是MyDataController类的实例变量,__dataController
是类变量。当您调用其公共静态+(MyDataController*)sharedController
方法时,此单例是自我初始化的。您可以像这样全局访问数据数组。
[[MyDataController sharedController] data];
要调用此单例,您需要在每个要访问它的类中#import "MyDataController.h"
,或将其添加到您的pch文件以全局访问它
#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单例,您可以为您的班级添加额外的便利方法。单例将保留对其自身类型的一个对象的引用,这意味着任何其他变量都可以声明为实例变量,而不是将它们声明为类变量。
答案 1 :(得分:0)
我知道您正在使用Stephen Darlington在此链接How to create nested array or multidimensional array上指出的方法。
所以我假设你正在创建一个记录类。如果你真的想编写更少的代码,那么为什么不使用NSDictionary / NSMutableDictionary来代替创建一个新的类(记录类)?
单例类已经有了NSMutable数组。该数组将用于存储词典。
1)将信息保存到字典 - 当一个类(有访问该单例)想要存储信息时...说出姓名,年龄,性别。 他们所要做的就是:
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,最终在单例中有一个Dictionaries数组。字典可以很容易地管理数据。您可以使用for循环或任何东西遍历单例中的数组,然后当您找到所需的Dictionary时,可以访问/比较/删除/添加其中的数据。查看NSDictionary Reference和NSMutableDictionary Reference,查看可在字典中使用的方法列表。使用字典可以节省编码时间,而不是在记录类中创建方法,这些方法执行已在字典中实现的相同操作。
答案 2 :(得分:0)
如果要在多个视图中访问相同的数据,可能需要查看CoreData。与您的轻量级单件方法相比,它有点牵扯,但您可能会发现从长远来看,它可以节省您的时间。 Apple提供的类可以在表格中显示数据,也可以在网络上获得很多帮助。