2011-05-26 31 views
0

在我的應用程序的主窗口中,我有一個集合視圖,每個集合視圖項目都包含一個NSTableView。此窗口的窗口控制器具有NSString *屬性projecttitle。該屬性綁定到窗口中的NSTextField,我已經覆蓋默認的返回鍵行爲,以便用戶可以按回車鍵並將回車寫入文本字段。 現在,在更改文本字段中的字符串,然後在兩個不同的集合視圖項目的表視圖之間拖動項目後,項目標題屬性變爲 nil 。我覺得可能我在這裏發生的事情太多了,而且這個bug也不可能追蹤到,但是也許有人看到了一些甚至與其他地方的這種行爲類似的東西?在nscollectionview中的nstableviews之間拖放設置窗口控制器屬性爲零?

編輯:放置在projecttitle屬性斷點似乎沒有產生任何有用的東西。程序執行在拖放時不會中斷,但是在此之後,屬性確實是零。

編輯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; 
} 

回答

0

好的,解決了。原來這是-getObjectValue:forString:errorDescription:方法。我有它實現爲

-(BOOL)getObjectValue:(id *)obj forString:(NSString *)string errorDescription:(NSString **)error { 
    *obj = string; 
    return YES; 
} 

更改*obj = string*obj = [NSString stringWithString:string]固定的一切權利了。

+0

顯然,我養成了回答自己的問題的習慣。 – Sean 2011-05-26 15:53:13

相關問題