2010-09-12 48 views
0

我在NSMutableArray中有一堆NSString。我已经将它们添加到数组中,现在我想循环访问数组,获取每个对象(字符串)并将它们设置为一个公共值@“No Lessons”。通过NSArray循环设置objectAtIndex值

这是我到目前为止的循环:但是如何获取对象然后设置它?目前它非常简单,只需循环访问数组,不会改变任何内容。

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"]; 
    } 
} 

所以,现在我在这里使用功能简单地把字符串转换为多个阵列,然后回来TOT他循环,它遍历数组,并把文进入物体。你能看到任何问题吗?

加载应用程序崩溃时出现SIGBRT错误。

+0

在预感上,{monP1A,monP2A,monP3A,monP4A,monP5A,monP6A}中的至少一个被破坏。这很难说清楚。 – 2010-09-12 13:49:10

回答

8

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

看来你正在设计一个应用程序来管理一周的“课程”,并试图通过蛮力来实现它:将一周的课程表示为字符串数组的集合。

而不是这样做,你应该考虑你可以用什么替代表示来简化应用程序。例如,您可以将具体日期的课程表示为特定索引中特定数组的字符串,而不是将课程表示为Lesson类的实例,该课程不仅包含课程的名称,还包括课程的名称,以及是否是早上或下午课:

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实际为您实施大部分数据模型要比按照您在问题中展示的方式或按照展示方式进行操作要容易得多你在上面。例如,使用核心数据我可能会将这个模型建模为三个实体 - 课程,日期和会话 - 其中一天与两个会话相关联,并且会话与课程相关联。