今天发现某些情况下mac模拟器会出现不输出log的情况, 跟踪了一下发现问题出现在mac/SimulatorApp.mm文件的handleNotification方法。
NSString *str = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];
这句代码在某些情况下str会为nil值导致模拟器不会输出任何log, 原因可能是data的编码中存在个别字符乱码导致整体不输出的情况。
修改后的代码如下
- (void)handleNotification:(NSNotification *)note { //NSLog(@"Received notification: %@", note); [_pipeReadHandle readInBackgroundAndNotify] ; NSData *data = [[note userInfo] objectForKey:NSFileHandleNotificationDataItem]; NSString *str = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]; if (!str) { str =[[[NSString alloc]initWithData:data encoding:NSASCIIStringEncoding] autorelease]; } if (!str) { str = @"encoding NSData to NSString error"; } //show log to console [_consoleController trace:str]; if(_fileHandle!=nil) { [_fileHandle writeData:[str dataUsingEncoding:NSUTF8StringEncoding]]; } }
当用utf8无法正常解码改用asc解码输出,这样就能看见输出了
时间: 2024-12-17 10:32:52