Как использовать класс, чтобы данные были доступны в нескольких представлениях? - PullRequest
0 голосов
/ 29 января 2012

Я новичок в Objective-C и пытаюсь найти лучший способ сделать "массив записей" пригодным для всех представлений в проекте.

У меня уже есть синглтон, и я прочитал, что должен создать класс, который будет моей «записью».

Обратитесь к этой теме в качестве примера: Как создать вложенный массив или многомерный массив

Итак, если я создаю массив экземпляров Class, я должен просто объявить массив как NSMutableArray в моем существующем Singleton, или есть лучший / более чистый способ достижения той же цели?

Ответы [ 3 ]

0 голосов
/ 29 января 2012

Я понимаю, что вы используете подход, указанный Стивеном Дарлингтоном по этой ссылке Как создать вложенный массив или многомерный массив .

Итак, я предполагаю, что вы создаете класс records . Если вы действительно хотите писать меньше кода, то вместо того, чтобы создавать новый класс (класс записей) для обработки записей, почему бы не использовать 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 в пределах синглтон-класса, чтобы в конечном итоге получить массив словарей в синглтоне. Словари будут легко управлять данными. Вы можете перемещаться по массиву в синглтоне, используя цикл for или что-либо еще, а затем, когда вы найдете нужный словарь, вы можете получить доступ к / сравнить / удалить / добавить / что угодно в данных. Проверьте NSDictionary Reference и NSMutableDictionary Reference , чтобы увидеть список методов, которые вы можете использовать в Словаре. Использование словаря должно сэкономить время кодирования, а не создавать методы в классе records , которые делают то же самое, что уже реализовано в словаре.

0 голосов
/ 29 января 2012

Если вы хотите получить доступ к одним и тем же данным в нескольких представлениях, вы можете посмотреть на CoreData. Это немного сложнее по сравнению с вашим более легким одноэлементным подходом, но вы можете обнаружить, что это экономит ваше время в долгосрочной перспективе. Apple предоставляет классы для отображения данных в виде таблиц, и в Интернете есть много помощи.

0 голосов
/ 29 января 2012

Вы можете создать синглтон-класс контроллера данных и использовать его так же, как Apple, в своих собственных средах. Вот пример класса контроллера одноэлементных данных.

// 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, вы можете добавить дополнительные удобные методы в ваш класс. Синглтон сохранит ссылку на один объект своего собственного типа, что означает, что любые дополнительные переменные могут быть объявлены как переменные экземпляра, а не объявлены как переменные класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...