Как синхронизировать раздел в MutableArray с UITextView - PullRequest
0 голосов
/ 22 марта 2011

У меня есть один MutableArray (NSMutableArray * NoteBook;), в котором я хотел бы хранить Notepages (я установил объект с именем NotePage.m, который просто содержит один NSString * noteText и метод setNoteText). У меня также есть целое число для отслеживания моих страниц (NSUInteger currentPageCounter;).

Я запускаю свою маленькую программу, настраивая новый экземпляр NotePage:

NotePage *newPage = [[NotePage alloc] init];
[newPage setNoteText:@"Sample Text for a certain page..."];

Затем я копирую эту * newPage 3 раза в свой изменяемый массив NoteBook:

[self.NoteBook insertObject:newPage atIndex:(self.currentPageCounter)]; 

Это даст мне 3 страницы, с индексами 0,1,2. Все идет нормально. Все работает великолепно. Но теперь приходит враг, UITextView. Прежде всего, я хотел бы отобразить содержимое страницы в моей записной книжке в UITextView. Поэтому я сделал это для синхронизации одного раздела в MutableArray (например, страницы с индексом 0) с UITextView, который работает нормально:

NotePage *thisPage = [self.NoteBook objectAtIndex:self.currentPageCounter]; 
TextViewNote.text = thisPage.noteText;

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

    -(IBAction) savePage
{
    NSString *tempString;
    tempString = [NSString stringWithFormat:@"%@",TextViewNote.text];

    NotePage *newPage = [[NotePage alloc] init];
    [newPage setNoteText:tempString];

    [self.NoteBook insertObject:newPage atIndex:(self.currentPageCounter)]; // e.g. at index 0 for page 1
    [self.NoteBook removeObjectAtIndex:(currentPageCounter+1)]; // i.e. this is to remove the old page 1 which used to be at index 0 but now is at index 1

    [self syncTextView];
    [self syncCounter];

}

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

Спасибо за любые идеи!

Ответы [ 2 ]

2 голосов
/ 22 марта 2011

Я думаю, что есть менее громоздкий способ (Я все еще начинающий ...) просто заменить объект по определенному индексу в изменчивом массиве.

Действительно. Посмотрите на - [NSMutableArray replaceObjectAtIndex: withObject:].

Учитывая опубликованную вами ошибку, похоже, что у вас где-то плохой указатель Ошибка жалуется на то, что где-то сообщение - [UITouchData length] отправляется экземпляру NotePage. Включите параметр «Остановка исключений Objective C» в отладчике (в меню «Выполнить»). Это должно помочь вам понять, где возникает проблема.

1 голос
/ 22 марта 2011

NSMutableArray имеет метод replaceObjectAtIndex:withObject:, который должен делать то, что вы пытаетесь сделать.

Однако у вас есть проблема с управлением памятью, если только вы не вызываете release на newPage после добавления его в массив. Если вы не планируете делать класс NotePage более сложным, возможно, имеет смысл просто изменить текст элемента, а не заменять новый объект:

[[self.noteBook objectAtIndex:currentPageCounter] setNoteText:tempString];

(Также имейте в виду, что при вставке объекта newPage в массив четыре раза не копирует объект; он просто вставляет одну и ту же ссылку четыре раза. Если вы хотите четыре разных объекта, вы будете нужно выделить четыре объекта в цикле:

for(i = 0; i < 4; i++){
    NotePage *newPage = [[NotePage alloc] init];
    [newPage setNoteText:@"Dummy text"];
    [self.notebook addObject:newPage];
    [newPage release];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...