我有一个存储一些字符串的类以及一个BOOL标志,如果其中一个字符串已更新,则该标志设置为YES。
我有一个NSTableView,它在我的班级中显示字符串。视图由单独的控制器类控制,视图由NSMutableArray提供。
GUI内容似乎在显示数据方面工作正常,并允许我在表格视图中编辑单元格。我遇到的问题是编辑不会更改存储在NSMutableArray中的对象。我有一些调试代码在关闭应用程序时打印出字符串,此时GUI中所做的任何更改都不会显示在对象中。设置更改这些值的断点会显示对象确实已更改,但这些更改似乎丢失了。如何在视图中进行任何更改以保留存储在支持NSTableView的NSMutableArray中的对象?
以下是我编码的方式:
// 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中所做的更改。此外,当关闭应用程序时打印NSMutableArray内容时,setChanged:YES也会丢失。
答案 0 :(得分:0)
此行为通常是由于数据在被用户更改后的某个时刻再次初始化。
您可以通过在初始化代码中设置断点(或NSLog
语句)来解决此问题。