0

我正在开发一个应用程序,该应用程序将从六个不同的视图控制器收集数据,然后创建收集的数据的 PDF 总结。我知道从多个屏幕聚合信息的两种方法,但两种方法似乎都很麻烦,让我觉得有更好的方法。

选项 #1 - 核心数据 -NSManagedObjects在下一个视图控制器上使用然后获取、添加和重新保存,然后获取...并重新保存...然后获取并重新保存。最后获取所有内容来构建PDF.

选项 #2 - 在视图控制器之间传递数据。但似乎我必须将数据从当前VC传递到下一个,然后我必须将相同的数据重新传递到下一个VC,依此类推。也戒掉辛苦。

有没有更简单的方法来聚合这些数据并将其传递给PDF我调用该类时?

我(显然)对iOS.

谢谢,本

4

2 回答 2

1

有很多方法可以做到这一点,但一种方法是定义一个所有视图控制器都可以访问的单例模型对象。例如,Model.h定义两个属性,textarray

#import <Foundation/Foundation.h>

@interface Model : NSObject

@property (nonatomic, strong) NSString *text;
@property (nonatomic, strong) NSMutableArray *array;

+ (instancetype)sharedModel;

@end

Model.m只需实现sharedManager允许各种控制器访问此共享模型的方法:

#import "Model.h"

@implementation Model

+ (instancetype)sharedModel
{
    static id sharedMyModel = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedMyModel = [[self alloc] init];
    });
    return sharedMyModel;
}

@end

然后,如果视图控制器想要使用它,只需包含一个

#import "Model.h" 

在顶部,然后任何视图控制器都可以通过以下方式访问模型:

Model *model = [Model sharedModel];

现在您可以随心所欲地设置或获取textandarray属性。例如

model.text = @"Hello, World";

显然,只需将属性更改为Model.h您想要的任何内容,而不是我的字符串和数组示例。

于 2013-05-09T05:49:48.273 回答
1

我构建了一个与此类似的项目,其中几个视图控制器将信息添加到名为评估项的共享单例数据对象中。我制作了一个基本视图控制器,我的所有视图控制器都继承自该控制器,它只有一个属性(assessedItem),该属性具有一个覆盖的 getter:

-(AssessedItem *)assessedItem {
    if (! _assessedItem) {
        _assessedItem = [AssessedItem assessedItem];
    }
    return _assessedItem;
}

在 AssessedItem 类中,我有一个类方法:

+ (id)assessedItem {
    static AssessedItem *assessedItem = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        assessedItem = [[self alloc] init];
    });
    return assessedItem;
}

AssessedItem 类有一堆属性,然后从任何控制器中,您都可以使用普通的点语法设置这些属性:

self.assessedItem.someProperty = @"whatever";
于 2013-05-09T05:57:27.893 回答