如何使用Class以便在多个视图中访问数据?

时间:2012-01-29 16:04:35

标签: iphone objective-c xcode

我是Objective-C的新手,我正在尝试找出使项目中所有视图都可以使用“记录数组”的最佳方法。

我已经有了一个Singleton,而且我已经读过我应该创建一个Class作为我的'记录'。

请参阅此主题作为示例:How to create nested array or multidimensional array

因此,如果我创建一个Class实例数组,我应该在现有的Singleton中将数组声明为NSMutableArray,还是有更好/更清晰的方法来实现相同的目标?

3 个答案:

答案 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 ReferenceNSMutableDictionary Reference,查看可在字典中使用的方法列表。使用字典可以节省编码时间,而不是在记录类中创建方法,这些方法执行已在字典中实现的相同操作。

答案 2 :(得分:0)

如果要在多个视图中访问相同的数据,可能需要查看CoreData。与您的轻量级单件方法相比,它有点牵扯,但您可能会发现从长远来看,它可以节省您的时间。 Apple提供的类可以在表格中显示数据,也可以在网络上获得很多帮助。