2010-09-12 93 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實際爲您實施大部分數據模型要比按照您在問題中展示的方式或按照展示方式進行操作要容易得多你在上面。例如,使用核心數據我可能會將這個模型建模爲三個實體 - 課程,日期和會話 - 其中一天與兩個會話相關聯,並且會話與課程相關聯。