我有两个UILabel,信息和接收。接收是假设告诉我我实际上正在接收数据。但是,当它确实表明....我的信息UILabel没有相应更新。它有时会起作用,有时也不起作用。
这是怎么回事?
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
[super viewDidLoad];
receiving = [[UILabel alloc] initWithFrame: CGRectMake(30,50,255,100)];
info = [[UILabel alloc] initWithFrame: CGRectMake(30,200,255,100)];
info.backgroundColor = [UIColor orangeColor];
receiving.backgroundColor = [UIColor orangeColor];
// [self.view addSubview: toggleSwitch];
receiving.text = @"Not Receiving...";
[self.view addSubview: info];
[self.view addSubview: receiving];
}
return self;
}
- (void) startCommThread:(id)object
{
// NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
// initialize RscMgr on this thread
// so it schedules delegate callbacks for this thread
rcsMgr = [[RscMgr alloc] init];
[rcsMgr setDelegate:self];
// run the run loop
[[NSRunLoop currentRunLoop] run];
// [pool release];
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Create and start the comm thread. We'll use this thread to manage the rscMgr so
// we don't tie up the UI thread.
if (commThread == nil)
{
commThread = [[NSThread alloc] initWithTarget:self
selector:@selector(startCommThread:)
object:nil];
[commThread start]; // Actually create the thread
}
}
- (void) readBytesAvailable:(UInt32)numBytes {
receiving.text = @"Receiving...";
NSString* str = [rcsMgr getStringFromBytesAvailable];
if ( str ) receiving.text = @"I GOT SOMETHING!";
// if ( numBytes ) receiving.text = numBytes;
else receiving.text = @"Still Receiving...";
info.text = str;
}
答案 0 :(得分:0)
这是我最好的答案,但需要注意的是我从未使用过RedPark的电缆或SDK。我的预感是,-readBytesAvailable:
由RscMgr在用于设置它的同一后台线程上调用。您不能在后台线程上使用UIKit对象。你需要转移回主线程/队列,如下所示:
- (void)readBytesAvailable:(UInt32)numBytes
{
NSString* str = [rcsMgr getStringFromBytesAvailable];
dispatch_async(dispatch_get_main_queue(), ^{
if (str) {
receiving.text = @"I GOT SOMETHING!";
} else {
receiving.text = @"Still Receiving...";
}
info.text = str;
});
}
此外,您的commThread上应该有一个自动释放池。你为什么评论它?