Цикл через NSArray Установка значения objectAtIndex - PullRequest
0 голосов
/ 12 сентября 2010

У меня есть куча строк NSS в массиве NSMutableArray.Я добавил их в массив, и теперь я хочу перебрать массив, получить каждый объект в нем (строки) и установить для них общее значение @ "No Lessons".

Вот как у меняпока что цикл: Но как я могу получить объект, а затем установить его?В настоящее время это довольно просто, просто циклично проходить по массиву, ничего не меняя.

NSInteger *count = [monLessonArrayA count];
    for (int i = 0; i < count; i++) {
        [monLessonArrayA objectAtIndex:i];
    }

Любая помощь очень ценится, спасибо.

РЕДАКТИРОВАТЬ:

Оказывается, естьбольшая проблема где-то.Вот код, который я использую:

NSMutableArray* lessonArrayFuncTwo(id a, id b, id c, id d, id e, id f) {
    NSMutableArray* lessonsArray = [[NSMutableArray alloc] init];
    [lessonsArray addObject:a];
    [lessonsArray addObject:b];
    [lessonsArray addObject:c];
    [lessonsArray addObject:d];
    [lessonsArray addObject:e];
    [lessonsArray addObject:f];
    return lessonsArray;
}

- (void)viewDidLoad {
    [super viewDidLoad];

monLessonArrayA = lessonArrayFuncTwo(monP1A, monP2A, monP3A, monP4A, monP5A, monP6A);
    monLessonArrayB = lessonArrayFuncTwo(monP1B, monP2B, monP3B, monP4B, monP5B, monP6B);
    tueLessonArrayA = lessonArrayFuncTwo(tueP1A, tueP2A, tueP3A, tueP4A, tueP5A, tueP6A);
    tueLessonArrayB = lessonArrayFuncTwo(tueP1B, tueP2B, tueP3B, tueP4B, tueP5B, tueP6B);
    wedLessonArrayA = lessonArrayFuncTwo(wedP1A, wedP2A, wedP3A, wedP4A, wedP5A, wedP6A);
    wedLessonArrayB = lessonArrayFuncTwo(wedP1B, wedP2B, wedP3B, wedP4B, wedP5B, wedP6B);
    thuLessonArrayA = lessonArrayFuncTwo(thuP1A, thuP2A, thuP3A, monP4A, thuP5A, thuP6A);
    thuLessonArrayB = lessonArrayFuncTwo(thuP1B, thuP2B, thuP3B, thuP4B, thuP5B, thuP6B);
    friLessonArrayA = lessonArrayFuncTwo(friP1A, friP2A, friP3A, friP4A, friP5A, friP6A);
    friLessonArrayB = lessonArrayFuncTwo(friP1B, friP2B, friP3B, friP4B, friP5B, friP6B);

    NSInteger count = [monLessonArrayA count];
    for (int i = 0; i < count; i++) {
        [monLessonArrayA replaceObjectAtIndex:i withObject:@"test"];
    }
}

Итак, здесь я использую функцию, которая просто помещает строки в несколько массивов, затем возвращается к циклу, где проходит по массивам и помещаеттекст в объекты.Вы видите какие-либо проблемы?

При загрузке приложения происходит сбой с ошибкой SIGBRT.

1 Ответ

8 голосов
/ 12 сентября 2010

Вместо того, чтобы выяснить, как заменить объекты по определенным индексам в изменяемом массиве, я думаю, вам следует сделать шаг назад и пересмотреть дизайн вашего приложения.

Похоже, вы пытаетесь спроектироватьприложение, которое управляет «уроками» в течение недели и пытается сделать это с помощью грубой силы: представление уроков недели в виде набора массивов строк.

Вместо того, чтобы делать это таким образом, вам, вероятно, следуетподумайте, какие альтернативные представления вы могли бы использовать для упрощения приложения.Например, вместо того, чтобы представлять уроки определенного дня в виде строк в определенных массивах по определенным индексам, вы могли бы вместо этого представлять запланированные уроки как экземпляры класса урока, который имеет не только название урока, но также его день и будь то утроили дневной урок:

typedef enum {
    LessonMonday=1,
    LessonTuesday=2,
    LessonWednesday=3,
    LessonThursday=4,
    LessonFriday=5,
} LessonDay;

typedef enum {
    LessonSessionA=1,
    LessonSessionB=2,
} LessonSession;

@interface Lesson : NSObject
@property (readwrite, copy) NSString *title;
@property (readwrite) LessonDay day;
@property (readwrite) LessonSesson session;

- (id)initWithTitle:(NSString *)title day:(LessonDay)day session:(LessonSession)session;
@end

Теперь вам нужно представлять только те уроки, которые фактически запланированы, скажем, в коллекции scheduledLessons.Ваш пользовательский интерфейс может определить, когда запланирован урок, и отобразить этот сеанс как пустой без необходимости «заполнять» пустой урок;если вы хотите позже запланировать урок для определенного слота, просто создайте новый экземпляр урока, чтобы представить урок в этом слоте и сохранить его.Это также упрощает такие вещи, как изменение места существующего урока, не перетаскивая данные повсюду: вы можете просто изменить название урока, или день урока, или сеанса, не мешая другим урокам.(Очевидно, что в таком случае вы хотели бы также проверить наличие конфликтов, но, опять же, это просто.)

После того, как вы поймете основы того, как моделировать что-то подобное в коде, я настоятельно призываю васвзгляните на использование базовых данных вместо того, чтобы делать это вручную.Как только вы начнете иметь дело с такими вещами, как постоянство и поиск, вам будет гораздо проще сделать так, чтобы Core Data фактически реализовала для вас основную часть вашей модели данных, чем делать это так, как вы показали в своем вопросе, или так, как я показываю.ты выше.Например, используя базовые данные, я бы, вероятно, смоделировал это как три объекта - урок, день и сессия - где день связан с двумя сессиями, а сеанс связан с уроком.

...