0

私は、6 つの異なるビュー コントローラーからデータを収集し、収集したデータの PDF の概要を作成するアプリに取り組んでいます。複数の画面から情報を集約する 2 つの方法を知っていますが、どちらも面倒なので、もっと良い方法があると思います。

オプション #1 - コア データ -NSManagedObjects次の View Controller でフェッチ、追加、再保存を使用してから、フェッチして再保存し、フェッチして再保存します。最後に、すべてを取得してPDF.

オプション #2 - ビュー コントローラー間でデータを渡す。しかし、現在のデータからVC次のデータにデータを渡す必要があり、同じデータを次のデータに再度渡す必要があるようVCです。面倒くさがりもやめましょう。

PDFこのデータを集約して、そのクラスを呼び出すときに渡す簡単な方法はありますか?

私は(明らかに)比較的新しいiOSです。

ありがとう、ベン

4

2 に答える 2

1

これを行う方法はたくさんありますが、1 つの方法は、すべてのビュー コントローラーがアクセスできるシングルトン モデル オブジェクトを定義することです。たとえば、次のModel.h2 つのプロパティを定義しtextますarray

#import <Foundation/Foundation.h>

@interface Model : NSObject

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

+ (instancetype)sharedModel;

@end

Model.msharedManagerさまざまなコントローラーがこの共有モデルにアクセスできるようにするメソッドを実装するだけです。

#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

次に、View Controller がこれを使用したい場合は、

#import "Model.h" 

上部にあるので、どのView Controllerも次の方法でモデルにアクセスできます。

Model *model = [Model sharedModel];

textこれで、およびarrayプロパティを思いのままに設定または取得できます。例えば

model.text = @"Hello, World";

明らかに、プロパティを変更してModel.h、文字列と配列の例ではなく、必要なものに変更してください。

于 2013-05-09T05:49:48.273 に答える
1

これに似たプロジェクトを構築しました。このプロジェクトでは、いくつかのビュー コントローラーが、assessedItem という共有シングルトン データ オブジェクトに情報を追加しました。すべてのView Controllerが継承したベースView Controllerを作成し、そのプロパティのオーバーライドされたゲッターを持つ1つのプロパティ(assessedItem)を持っていました:

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

AssessedItem クラスには、次の 1 つのクラス メソッドがありました。

+ (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 に答える