2013-05-21 3 views
1

У меня есть класс, который хранит некоторые строки вместе с флагом BOOL, который установлен в YES, если одна из строк была обновлена.Редактирование NSTableView не меняется NSMutableArray

У меня есть NSTableView, который отображает строки в моем классе. Вид контролируется с помощью отдельного класса контроллера, а представление подается с помощью NSMutableArray.

Материал GUI, похоже, отлично работает с точки зрения отображения данных и позволяет редактировать ячейки в виде таблицы. Проблема, с которой я столкнулась, - это изменения, которые не изменяют объекты, хранящиеся в NSMutableArray. У меня есть код отладки, чтобы распечатать строки при закрытии приложения, и ни одно из изменений, внесенных в графический интерфейс, не появилось в объектах на данный момент. Установка точки останова, в которой эти значения изменены, показывает мне, что объекты действительно изменены, но эти изменения, похоже, теряются. Как я могу получить какие-либо изменения, которые я делаю в представлении, для сохранения в объекте, хранящемся в NSMutableArray, поддерживающем NSTableView?

Вот как я кодирования:

// my class .h file 

@interface Snip : NSObject <NSMutableCopying> 

@property (assign) int64_t id_num; 
@property (assign) BOOL  changed; 
@property NSMutableString *name; 
@property NSMutableString *text; 
@property (copy) NSString *language; 


// my class .m file 

import "Snip.h" 

@implementation Snip 

@synthesize id_num; 
@synthesize name; 
@synthesize text; 
@synthesize changed; 
@synthesize language; 

метод из моего контроллера класса

// edit table values 
-(void)tableView:(NSTableView *)tableView setObjectValue:(id)object forTableColumn(NSTableColumn *)tableColumn row:(NSInteger)row 
{ 
    Snip *sn = [snippet_list objectAtIndex:row]; 

    [sn setChanged:YES]; 

    [sn setValue:object forKey:[tableColumn identifier]]; 

    NSLog(@"Change: %@",sn.name); 
} 

Это последнее утверждение NSLog показывает изменение, которое я сделал в GUI. Кроме того, setChanged: YES также теряется, когда я печатаю содержимое NSMutableArray при закрытии приложения.

+0

У вас есть код инициализации, который запускается после внесения изменений? Любой шанс, что вы могли бы поставить точку останова? – Monolo

+0

@Monolo -> Я считаю, что вы отправили меня по правильному пути. Я расследую и буду отчитываться. –

+0

@Monolo -> Оказывается, ваш вопрос был именно тем, что мне нужно было услышать. Я дважды запускал инициализацию и, таким образом, возвращал массив обратно в базу данных. Цените помощь. Я дам вам признанный знак ответа, если вы ответите на эту проблему. –

ответ

0

Такое поведение часто связано с тем, что данные были снова инициализированы в какой-то момент после изменения пользователем.

Вы можете поймать эту проблему, установив точку останова (или NSLog) в свой код инициализации.