2010-07-20 66 views
0

我想從字典中的內容到UITextView。字典包含百分比配對分子質量,例如:UITextView.text屬性不會更新第一次,然後剪輯或不顯示時,它

24 -> 98 
25 -> 1.9 
26 -> 0.1 

我有一個包含從詞典,按升序排序的按鍵一個NSArray。所以,這裏是我的代碼生成的字符串設定爲TextField.text屬性:

-(void)detailIsotopes:(NSMutableDictionary *)isotopes withOrder:(NSMutableArray *)order{ 
NSMutableString *detailString = [[NSMutableString alloc] init]; 

for (NSNumber *mass in order){ 
    [detailString appendString:[NSString stringWithFormat:@"%d: %f\n", [mass integerValue], [[isotopes valueForKey:[NSString stringWithFormat:@"%@", mass]] floatValue]]]; 
} 

NSLog(@"%@", detailString); 
textField.text = detailString; 
[detailString release]; 
} 

這應該創建一個字符串看起來像這樣:

24: 89 
25: 1.9 
26: 0.1 

出於某種原因,這種方法從來不任何第一次運行。我看到NSLog輸出,輸出正確的字符串。但是,UITextView的內容不會改變:它們保持爲Interface Interface Builder中的「Lorem ipsum dolor sit amet ...」。如果我再次運行該方法,它可以工作,有點。

UITextView顯示一些文本,然後只是在一行中間切斷,只留下字符的頂部。如果我刪除半行以上的內容,其他行將從分隔下拉起來:內容在那裏,如果明白我的意思,它們就會停止顯示。如果我在視圖中啓用分頁,這似乎會消失。如果我這樣做,那麼該行不會被截斷,但UITextView只是在某點之後停止顯示任何內容,儘管滾動條表明還有更多內容要去(哪裏有)。

當設置內容時,包含UITextView的視圖不可見,如果這有所作爲。一個單獨的視圖控制器生成NSMutableDictionary和NSMutableArray並將它們發送給它的委託,委託將它們發送到應該顯示UITextField並具有detailIsotopes:withOrder:方法的視圖。這兩者可以在信息按鈕之間交換。

有沒有人明白爲什麼會發生這些事情? 感謝您提供任何建議!

回答

1

首先,我不認爲你需要在這裏分配和釋放你的NSMutableString。只需使用[NSMutableString string]初始化一個,它將創建一個空字符串,您可以修改並且不需要明確釋放。

第二件事,你似乎商店羣衆NSString的在你NSDictionnary,爲什麼要使用他們的stringWithFormat(與%d修改)integerValue方法,而不是利用他們作爲是什麼? (NSString的stringWithFormat修飾符是%@

另外,你在開始時討論UITextView,然後討論UITextField,你確定你沒有在某個地方犯過錯嗎?我猜你格式化的NSString的接收對象應該是UITextView(如果你有一個textField和textView)。

如果不是這個,也許你打電話detailIsotopes太早,它的textView它創建。嘗試NSLog的地址,看看它是否第一次是nil。如果您使用Interface Builder,並且您的UITextField是ib插座,則可能是這種情況。如果你這樣做,那麼你可以將你的字典和數組存儲在viewController中,並在viewController的方法中設置textField。或者在顯示視圖後撥打detailIsotopes,我想這取決於你。

關於截斷文本,我認爲這是因爲UITextView不會自動調整自身大小,所以它保持原來設置的高度。我通常做的是這樣的:

CGRect frame = textView.frame; 
frame.size.height = textView.contentSize; // you can adjust this to leave some space at the end 
textView.frame = frame; 

這將設置textView高度爲內容(文本)的高度。 另請注意,如果您的textView應該顯示整個文本,則可以將其scrollingEnabled屬性設置爲FALSE,以便它永遠不允許滾動。

希望有所幫助。

+0

謝謝,修復它。我試圖設置textview的值,而它仍然是零。至於截斷問題,一旦我修復了textview代碼,它似乎就消失了。那謝謝啦 :) – 2010-07-21 10:48:56

相關問題