Ios 如果我激活断点,应用程序将运行,否则将失败
我有一个应用程序,它使用套接字向服务器发送登录信息,并以联系人列表的形式接收响应。这是处理服务器响应的主要方法:Ios 如果我激活断点,应用程序将运行,否则将失败,ios,objective-c,sockets,Ios,Objective C,Sockets,我有一个应用程序,它使用套接字向服务器发送登录信息,并以联系人列表的形式接收响应。这是处理服务器响应的主要方法: -(void) stream:(NSStream*)theStream handleEvent:(NSStreamEvent)streamEvent { switch(streamEvent) { case NSStreamEventOpenCompleted: NSLog(@"Stream opened"); break; ca
-(void) stream:(NSStream*)theStream handleEvent:(NSStreamEvent)streamEvent {
switch(streamEvent) {
case NSStreamEventOpenCompleted:
NSLog(@"Stream opened");
break;
case NSStreamEventHasBytesAvailable:
if(theStream == inputStream) {
uint8_t buffer[8196];
int len;
while([inputStream hasBytesAvailable]) {
len = [inputStream read:buffer maxLength:sizeof(buffer)];
if(len>0) {
NSString *output = [[NSString alloc] initWithBytes:buffer length:len encoding:NSUTF8StringEncoding];
if(output != nil) {
NSLog(@"server said: %@", output);
id jsonOutput = [self createJsonFromString:output];
if([[jsonOutput objectForKey:@"msg_type"] isEqualToString:@"LoginResponse"])
{
[self sendMessage:[self createAddressBookRequestJsonData]];
} else if ([[jsonOutput objectForKey:@"msg_type"] isEqualToString:@"GetAddressBookResponse"])
{
id contactList = [jsonOutput objectForKey:@"contact_list"];
for(id contactListItem in contactList)
{
XYZAddressBookEntry *newEntry = [[XYZAddressBookEntry alloc] init];
newEntry.firstName = [contactListItem objectForKey:@"FirstName"];
newEntry.lastName = [contactListItem objectForKey:@"LastName"];
newEntry.displayName = [contactListItem objectForKey:@"DisplayName"];
newEntry.softphoneNumber = [contactListItem objectForKey:@"SoftphoneNumber"];
newEntry.homeNumber = [contactListItem objectForKey:@"HomeNumber"];
newEntry.mobileNumber = [contactListItem objectForKey:@"MobileNumber"];
newEntry.businessNumber = [contactListItem objectForKey:@"BusinessNumber"];
newEntry.name = [contactListItem objectForKey:@"Name"];
newEntry.phoneAddress = [contactListItem objectForKey:@"PhoneAddress"];
[self.entryList addObject:newEntry];
}
[self.tableView reloadData];
}
}
}
}
}
break;
case NSStreamEventHasSpaceAvailable:
break;
case NSStreamEventEndEncountered:
[theStream close];
[theStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
break;
case NSStreamEventErrorOccurred:
NSLog(@"Can not connect to the host!");
break;
default:
NSLog(@"Unknown event:");
} }
我总是在日志中获得正确的输出,所以一切都很顺利,但是如果我没有在NSLog(@“服务器说:%@”,输出)之后设置断点,它将不会进入if-else代码块。我错过了什么
顺便说一句,我是这方面的新手,两周前才开始使用objective-c。让我们添加{}在这种情况下,有时它会弄乱,可能会为每个事件放置日志,以确保它们都按照您的预期发生。PS我强烈建议使用库来进行套接字通信。是的,CocoaAsyncSocket将使您的生活更轻松。您也可以使用AFNetworking-。代码如下-`uint8_t buffer[8196];`只是要求一个crash@PokeyMcPokerson谢谢你的链接。这个库非常容易使用。