关于iPhone:如何使用类,以便可以在多个视图中访问数据?

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 data是MyDataController类的实例变量,而__dataController是类变量。当您调用其公共静态+(MyDataController*)sharedController方法时,此单例将自动初始化。您可以像这样全局访问数据数组。

1
[[MyDataController sharedController] data];

要调用此单例,您需要在每个要从中访问它的类中#import"MyDataController.h"或将其添加到您的pch文件中以全局访问它

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单例,可以为您的班级添加其他便捷方法。单例将保留对自己类型的一个对象的引用,这意味着可以将任何其他变量声明为实例变量,而不是将其声明为类变量。