在nscollectionview中的nstableviews之间拖放将窗口控制器属性设置为nil?

问题描述

| 在应用程序的主窗口中,我有一个集合视图,这样每个集合视图项都包含一个NSTableView。该窗口的窗口控制器具有
NSString *
属性
projecttitle
。此属性绑定到窗口中的NSTextField,我已经覆盖了该窗口的默认返回键行为,以便用户可以单击Return并将回车符写入文本字段。现在,更改文本字段中的字符串,然后在两个不同集合视图项目的表视图之间拖动一个项目后,projecttitle属性将变为
nil
。我觉得也许我在这里做的事情太多了,并且这个错误将不可能被追查,但是也许有人在其他地方甚至看到了与这种行为非常相似的东西? 编辑:在projecttitle属性上放置一个断点似乎没有产生任何有用的信息。拖放时程序执行完全不会中断,但是此后该属性确实为nil。 编辑2:经过更多的挖掘后,似乎该行为与NSFormatter对象有关。它不仅在拖放时发生,而且很明显在nstextfield尝试辞职为响应者时发生。当我断开IB中的格式化程序对象时,此行为停止。这是格式化程序的字符串验证代码,该代码会强制字符串长度小于或等于4行,并且每行不超过32个字符。实际在文本字段中键入时,这似乎工作正常,但显然不是在此之后。
-(BOOL)isPartialStringValid:(NSString **)partialStringPtr
      proposedSelectedRange:(NSRangePointer)proposedSelRangePtr
             originalString:(NSString *)origString
      originalSelectedRange:(NSRange)origSelRange
           errorDescription:(NSString **)error {

    NSArray * lines = [*partialStringPtr componentsSeparatedByString:@\"\\n\"];
    if ( [lines count] > 4 ) {
        return NO;
    }

    for (NSString * line in lines) {
        if ( [line length] > self.maxlength ) {
            return NO;
        }
    }

    return YES;
}
    

解决方法

好,解决了原来是
-getObjectValue:forString:errorDescription:
方法。我把它实现为
-(BOOL)getObjectValue:(id *)obj forString:(NSString *)string errorDescription:(NSString **)error {
    *obj = string;
    return YES;
}
*obj = string
更改为
*obj = [NSString stringWithString:string]
可以固定所有内容。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...