我有一个应用程序,它使用套接字将登录信息发送到服务器并以联系人列表的形式接收响应。这是处理来自服务器的响应的主要方法:
-(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代码块。我错过了什么?
顺便说一下,我是这个新手,2周前开始使用objective-c。