这是我的第一篇文章,我想首先感谢许多 stackoverflow 贡献者,他们永远不知道过去几天在我努力完成我的第一个 iOS 应用程序时他们帮助了我多少。我感谢他们和这个网站给他们一个发帖的地方。为了“还清”一些债务,我希望这会帮助其他人,因为我得到了帮助......
因此,我的应用程序使用 GKPeerPickerController 连接到第二台设备。连接后,设备可以相互发送短信。接收对等方的消息显示在 UIAlertView 中。一切正常。
然后我决定尝试位置并添加代码以获取当前位置。我将其转换为以度、分和秒为单位的纬度和经度,并将它们放入一个 NSString 中。我在我的故事板中添加了一个名为“发送位置”的按钮,点击该按钮时,会将位置发送给连接的对等方。这就是我遇到问题的地方。
btnSendLocation 使用 NSString 调用 sendPacket。sendPacket 将字符串转换为 NSData 并调用失败的 sendDataToAllPeers。当我了解如何捕获错误时,它是“无效参数 - sendDataToAllPeers:withDataMode:error:”。为什么会发生错误?我还有另外两种方法,它们也调用 sendPacket 并且工作正常。
-(IBAction)btnSendLocation: (id)sender
{
// Put latitude, longitude into string, then convert to NSData for sending
NSMutableString *tmp = [[NSMutableString alloc] initWithString:@"Latitude: "];
// Build the location string to send
[tmp appendString:slatitude];
// …code for longitude
strToSend = [tmp copy];
bool sentPkt = false;
sentPkt = [self sendPacket:strToSend failedWithError:nil];
}
- (bool)sendPacket: (NSString *)strToSend failedWithError: (NSError *)error
{
bool sendPktOK = false;
packet = [strToSend dataUsingEncoding:NSASCIIStringEncoding];
// Send the packet.
sendPktOK = [self.currentSession sendDataToAllPeers:packet
withDataMode:GKSendDataReliable error:&error];
// If there was an error, log it.
if (!sendPktOK) {
NSLog(@"Error Domain: %@", [error domain]);
NSLog(@"Error Descr: %@", [error localizedDescription]);
NSLog(@"Error Code: %@", [error code]);
return NO;
}
return YES;
}
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
{
// Location default is decimal degrees notation; convert to deg-min-secs
int degrees = newLocation.coordinate.latitude;
double decimalPart = fabs(newLocation.coordinate.latitude - degrees);
int minutes = decimalPart * 60;
double seconds = decimalPart * 3600 - minutes * 60;
NSString slatitude = [NSString stringWithFormat:@"%d° %d' %1.1f\"",
degrees, minutes, seconds];
// rest of code...
}