【问题标题】:NSTableView edits not changing NSMutableArrayNSTableView 编辑不改变 NSMutableArray
【发布时间】:2013-05-21 16:41:05
【问题描述】:

我有一个类,它存储一些字符串以及一个 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 也会丢失。

【问题讨论】:

  • 您是否有任何初始化代码在您进行更改后运行?你有没有机会在里面放一个断点?
  • @Monolo -> 我相信你让我走上了正确的道路。我正在调查并会报告。
  • @Monolo -> 原来你的问题正是我需要听到的。我运行了两次初始化,因此将数组重置回数据库的状态。感谢帮助。如果您提出解决此问题的答案,我会给您接受的答案复选标记。

标签: objective-c xcode nsmutablearray nstableview


【解决方案1】:

这种行为通常是由于数据在用户更改后的某个时间点再次初始化。

您可以通过在初始化代码中设置断点(或NSLog 语句)来解决此问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    相关资源
    最近更新 更多