好吧,我现在得到了解决方案。与往常一样,只要你知道如何,它就非常简单:-) 看起来,我对最初的问题描述并不是很清楚,这里再次描述了功能描述: 我需要我的应用程序来显示我的SQLITE3中的文本数据库放在UITextView中,并每隔2秒用DB中下一条记录的文本更新该文本。所以我最初的想法是在Select循环内完成它。随着毛茸茸的提示,视图将不会更新,在完成循环,因为它在单线程中运行之前,我开始寻找另一个解决方案,并提出了以下基于选择器的解决方案,这非常棒。
该溶液到在用户界面中的任何对象的这样的程序化和迭代更新是这样
- (IBAction)displayTextFromArray:(UIButton *)sender{
timer = [NSTimer scheduledTimerWithTimeInterval:(2.0) target:self selector:@selector(displayText) userInfo:nil repeats:YES];
的方法}
在我的情况下,调用此方法当用户触摸一个UIButton 。为了使计划停止,则需要将下列消息发送到定时器实例:
[timer invalidate];
当然,我不得不改变我的代码位与计划的计时器运行,但是从迭代的角度来看,上面的代码是您需要触发并停止调度程序的所有内容。希望这也能帮助其他人也有类似的问题。
干杯,勒
对不起,似乎我不清楚我的问题。 samkass明白了,因为我在我的UITextView上尝试了setNeedsDisplay方法。我需要做的,因为我在一个循环中读取所有的记录,其中包含我的TextBlocks反复地显示,这里的代码片段:\t \t而(sqlite3_step(selectstmt)== SQLITE_ROW) \t \t { \t \t \t自我.myText1 = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt,0)]; \t \t \t \t \t \t self.myTextView1.text = self.question; \t \t \t [self.myTextView1 setNeedsDisplay]; \t \t} – renesteg 2010-09-17 06:08:15
顺便说一句:setNeedsDisplay无效,回答samkass问题。只有第一个记录被显示,最后一个。即使我将setNeedsDisplay消息发送到UITextView,它也不会更新循环内的显示。 – renesteg 2010-09-17 06:16:27
就像我说的,只要你有'self.myTextView1.text = self.question;','myTextView1'已经被标记为需要更新它的显示,所以'[self.myTextView1 setNeedsDisplay];'什么也不做。我想你在问什么:“当我在循环中设置”UITextField“的'text'属性时,为什么不显示更新?”答案是“UI在单个线程上运行,所以直到完成循环,它根本没有机会更新UI” – 2010-09-17 06:53:16