Это сводит меня с ума немного ..NSTableView + NSTextView = Disaster :(
вниз ниже скриншот моей программы до сих пор.
Справа является NSTableView (вид на основе). Здесь пользователь может выбрать документ, который они хотят работать.
слева является NSTextView. Текст будет отображаться в зависимости от того, какой элемент они выбирают в NSTableView.
есть также большой плюс и минус кнопки для создания/удаления новых элементов в таблице Посмотреть.
Простое право? Я хочу.
Сейчас у меня есть это так TableView получает данные от изменяемого массива. Изменчивый массив содержит объекты класса DocumentItem. DocumentItem имеет две строки: одну для текста документа и одну для названия документа.
Что работает до сих пор:
Когда я вручную добавлять объекты в массив с помощью кода, я могу свободно переключаться с документами и TextView будет обновляться соответственно.
Что не работает:
Когда пользователь переключается на другой документ, я хочу, чтобы вызвать метод replaceObjectAtIndex
NSTableView сохранить изменения, которые они внесли в объект в массиве.
Как мой код работает до сих пор:
изменяемый массив хранится в классе данных. Класс данных является общим классом и упоминается в моем коде как DATA.
У меня есть цикл цикла в моем классе, который имеет textview. В моем классе tableview у меня есть метод под названием blastToScreen, который изменит BOOL с именем shouldBLAST на YES.
Вот код в моем классе TableController установить BOOL в YES:
- (void) blastToScreen{
theDATA.blasttext = [[theDATA.globaldoclist objectAtIndex:[tablevieww selectedRow]] doccontents];
theDATA.shouldBLAST=YES;
}
Вот метод shouldBLAST в моей петельные нити (в другом классе от TextView). Обратите внимание, что if-statement, в котором указано if(theDATA.switchedrow)
, должен убедиться, что определенный код запускается только тогда, когда пользователь переключает свою строку в представлении таблицы.
if(theDATA.shouldBLAST){
if(theDATA.switchedrow){
DocumentItem * itemr = [theDATA.globaldoclist objectAtIndex:theDATA.lastindex];
NSLog(@"(%li) prev content - >%@",(long)theDATA.lastindex,itemr.doccontents);
itemr.doccontents=textvieww.string;
NSLog(@"(%li)adding content - > %@ <- to %@",theDATA.lastindex, itemr.doccontents,itemr.docname);
theDATA.switchedrow=NO;
[theDATA.globaldoclist replaceObjectAtIndex:theDATA.lastindex withObject:itemr ];
NSLog(@"changed: - > %@",[[theDATA.globaldoclist objectAtIndex:theDATA.lastindex] doccontents]);
}
textvieww.string=theDATA.blasttext;
theDATA.shouldBLAST=NO;
NSLog(@"changed: - > %@",[[theDATA.globaldoclist objectAtIndex:theDATA.lastindex] doccontents]);
theDATA.lastindex=theDATA.selectedrow;
}
Вот странная часть обо всем этом:
Согласно заявлениям NSLog я установил, мой код работает на долю секунды, а затем сбрасывает.
Внизу, что говорит консоль. игнорировать (0). это просто говорит о последнем выбранном индексе.
Это означает, что текст перед переключением был ничем (прекрасным). Он говорит, что добавляет в этот массив текст «Картофель» (все еще отлично). Затем, в первый раз, когда я извлек объект из массива, он показывает, что он успешно изменился на «Картофель» (все еще отлично). Затем, когда я попытался получить ТОЧНЫЕ точные данные несколькими строками позже, он ничего не вернул. .. :(
Я чувствую, что вопрос находится где-то в моем классе TableController Here's a link к коду в моем классе TableController
Вот что вернулся консоль:
2015-09-14 17:17:46.024 Simplicity[4801:432580] (0) prev content - >
2015-09-14 17:17:46.025 Simplicity[4801:432580] (0)adding content - > Potato <- to Untitled
2015-09-14 17:17:46.025 Simplicity[4801:432580] changed: - > Potato
2015-09-14 17:17:46.025 Simplicity[4801:432580] changed: - >
Я действительно надеюсь, что вы, ребята, можете помогите мне. Я пробовал почти все, что мог, чтобы решить эту проблему. Это удерживает меня от завершения моего программного обеспечения.
трудно помочь, не зная, что такое 'theDATA.globaldoclist', можете ли вы зарегистрировать это значение? – aug2uag
@ aug2uag globaldoclist - это общий массив, который я использую для nstableview. –
Еще одна катастрофа - это длительность презентации вашей проблемы. Сделайте это кратким. Никто не собирается тратить больше 30 секунд на чтение проблемы, которую кто-то другой. –