循环遍历NSArray设置objectAtIndex值

时间:2010-09-12 11:22:49

标签: iphone objective-c loops nsmutablearray nsarray

我在NSMutableArray中有一堆NSStrings。我已将它们添加到数组中,现在我想循环遍历数组,获取其中的每个对象(字符串)并将它们设置为公共值@“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 个答案:

答案 0 :(得分:8)

我认为您应该退后一步并重新考虑应用程序的设计,而不是弄清楚如何在可变数组中替换特定索引处的对象。

您似乎正在尝试设计一个管理“课程”一周的应用程序,并且正在尝试通过暴力破解:将本周的课程表示为字符串数组的集合。

您应该考虑使用哪些替代表示来简化应用程序,而不是这样做。例如,您可以将特定日期的课程表示为特定索引中特定数组中的字符串,而不是将计划课程表示为课程类的实例,该课程不仅具有课程名称,还包含其当天以及是否为早晨或下午的课程:

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而不是手动执行。一旦你开始处理持久性和搜索之类的事情,让核心数据实际为你实现大部分数据模型要比你在问题中展示的方式或者我展示的方式更容易实现你在上面。例如,使用核心数据我可能会将其建模为三个实体 - 课程,日期和会话 - 其中一天与两个会话相关联,一个会话与课程相关联。