gpt4 book ai didi

iphone - 应用程序在 UITextView 滚动后崩溃

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:45:01 24 4
gpt4 key购买 nike

背景

我的应用从网络流中获取数据,并更改屏幕上 UI 元素的值。一个元素是 UITextView,它用作传入数据的一种日志。它应该在应用程序收到具有传入数据性质的“HasBytesAvailable”NSStreamEvent 时更新。 (例如,如果传入的数据与蛋糕有关,则 TextView 将更新为“6/22/12 8:00 - 得到蛋糕”之类的内容)下面显示了它如何更新的示例。

[logString insertString:@"This is an update\n" atIndex:0]; 
//logstring is a MutableString I use to hold my UITextView's text
[logString insertString:timeString atIndex:0]; //timestring is current time
logView.text = logString; //logView is my UITextView
[logView flashScrollIndicators];

//logstring and logview declaration and implementation
@property (nonatomic,retain) IBOutlet UITextView *logView;
@property (nonatomic,retain) NSMutableString *logString;

logString = [[NSMutableString alloc] initWithString:@"-logging started\n"];

问题

只要我不尝试滚动 TextView,更新就会按照我的意愿进行。但是,如果我滚动文本并按住它,大概足够长的时间让我的更新代码被调用,当我停止滚动时应用程序崩溃。我可以很好地浏览文本,只是当它必须处理传入的数据包并且我仍在滚动时它会崩溃。此外,当我滚动时,不会更新任何其他内容。所有应该由接收到的数据更新的标签保持不变。

我的想法

应用程序似乎无法同时处理滚动和处理传入数据。我不确定这是不是因为我在内存管理方面做错了什么,或者我需要覆盖一些滚动功能,或者完全覆盖其他东西。感谢任何帮助或想法。

解决方案

正如 trumpetlicks 所说,我需要为我的网络任务实现多线程为此,我执行了以下操作:

在初始化中:

NSOperationQueue *networkQueue = [NSOperationQueue new];
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(initNetworkCommunication) object:nil];
[networkQueue addOperation:operation];
[operation release];

在 initNetworkCommunication 中,初始化 CFSocketpair 和流之后:

[[NSRunLoop currentRunLoop] run]; //necessary to handle stream events

最佳答案

从这里开始。

developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/... 你可以

还希望添加您的网络设置和使用代码,以便我们都能看到您在那里做什么!!!

关于iphone - 应用程序在 UITextView 滚动后崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11157671/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com