我有一个应用程序,我希望在两个iPhone之间交换通过Core Data管理的信息.
有没有人尝试过这个,如果有的话,这被认为是最好的方法(即人们在文件中使用某些中间格式,如XML或JSON,或者可以直接传输对象).
如果问题在范围内显得过于夸张,我表示道歉,但我正处于需要决定转移方法的阶段,而且我没有使用此API的经验.
对于使用GameKit在设备之间传输对象的任何代码示例或任何此类示例的链接,我将非常感激.
我应该在什么时候将NSData对象分解为多个对象,或者使用第三方数据源在GKSession蓝牙对等体之间发送数据?
我正在四处寻找合适的技术来实现我想要的应用程序。基本上我使用蓝牙通过 2 个 iOS 设备建立连接。在通信的第一部分中,我只发送消息,一切正常。在第二部分中,我想允许用户共享视频文件;例如,假设视频文件为 20 MB。现在,通过两台设备传输如此大数据的最佳选择是什么?我可以使用 GameKit 并将数据拆分为小数据包吗?需要合理的时间吗?或者最好使用 Bonjour 并等待,直到用户位于同一 wifi 网络下或通过 2 台设备创建 wifi 网络?
提前致谢
我已经看到,在iOS 5中,CoreBluetooth提供了检查蓝牙是否被禁用的功能.从我所看到的文档来看,它显然是针对蓝牙外设使用的.但是,我正在尝试检查蓝牙是否已打开,因为我正在使用GameKit(GKPeerPickerController),如果未启用蓝牙连接,将无休止地搜索,这是一个问题.
我尝试这样做:
CBCentralManager * manager = [[CBCentralManager alloc] init];
if (manager.state == CBCentralManagerStatePoweredOn ) {
//go ahead with GameKit
}
Run Code Online (Sandbox Code Playgroud)
这不起作用,并且manager.state始终等于null.我在这做错了什么?或者,有没有更好的方法来检查iPhone上的蓝牙状态?
编辑:我不想调用任何私有API,因为我将这个应用程序提交到应用程序商店.我已经编辑了我的问题标题以澄清这一点.
我正在使用标准配对用户界面和两个 iPad 的 iOS6。问题是当我在第一个设备中创建新匹配时,第二个设备应该在我查看匹配用户界面时看到现有匹配,但事实并非如此。我确定我的代码是正确的。这是方法:
-(void)findMatchWithMinPlayers:(int)minPlayers maxPlayers:(int)maxPlayers viewController:(UIViewController*)viewController {
// the view that will present Matchmaker View Controller
self.viewCaller = viewController;
GKMatchRequest *request = [[GKMatchRequest alloc] init];
request.minPlayers = minPlayers;
request.maxPlayers = maxPlayers;
GKTurnBasedMatchmakerViewController *viewMatchmaker = [[GKTurnBasedMatchmakerViewController alloc] initWithMatchRequest:request];
viewMatchmaker.turnBasedMatchmakerDelegate = self;
viewMatchmaker.showExistingMatches = YES;
[self.viewCaller presentViewController:viewMatchmaker animated:YES completion:nil];
}
Run Code Online (Sandbox Code Playgroud)
我什至尝试了两个不同的示例游戏,但都出现了同样的问题,那么我该如何解决呢?
对于我正在开发的iOS应用程序,我希望多个手机相互连接,并能够在这些设备之间进行语音聊天.
当两个设备都在同一个网络上时,我就可以使用它.这很简单,我想做的大部分事情都是可能的.
但现在我正在增加互联网支持,这是一件非常麻烦的事情.我将首先尝试使用我设置的小型Web服务来解释我希望如何匹配设备.
服务器
网络服务
客户
这不起作用,因为我的网络不允许传入连接和随机端口(来自外部网络).
但现在的问题是,我该如何解决这个问题呢?我希望能够在2个设备之间建立对等连接,这些设备可以在同一网络上,也可以在不同的网络上.
是否有框架,示例或任何显示如何执行此操作的内容?我希望能够将数据从设备发送到设备,而不是先将其发送到服务器.
我有以下代码,我以前用来处理邀请:
[GKMatchmaker sharedMatchmaker].inviteHandler = ^(GKInvite *acceptedInvite, NSArray *playersToInvite) {
// Insert game-specific code here to clean up any game in progress.
if (acceptedInvite) {
GKMatchmakerViewController *mmvc = [[GKMatchmakerViewController alloc] initWithInvite:acceptedInvite];
mmvc.matchmakerDelegate = self;
[self presentViewController:mmvc animated:YES completion:nil];
}
};
Run Code Online (Sandbox Code Playgroud)
但是,现在它已被弃用了iOS 7.我在哪里以及如何在项目中注册GameKit邀请处理程序?
要加载Game Center排行榜,我目前致电:
-(void) showLeaderboard:(NSString*)leaderboardId
{
GKLeaderboardViewController *viewController = [GKLeaderboardViewController new];
viewController.leaderboardDelegate = self;
if (leaderboardId)
{
viewController.category = leaderboardId;
}
[[self topViewController] presentViewController:viewController animated:YES completion:nil];
}
Run Code Online (Sandbox Code Playgroud)
然而,这总是加载默认排行榜,然后用户多按下后退按钮以查看所有可用的排行榜.
由于我的方法是从我的游戏的主菜单中调用的,因此将我的玩家带到1级排行榜并不合适.
如何加载视图控制器以便只显示所有可用的排行榜,而不是让我的播放器点击后退按钮...
期望的结果......

怎么了...

我在"功能"选项卡上有一个"为您的信息plist文件添加GameKit键"错误.那是什么意思?

gamekit ×10
ios ×6
iphone ×4
objective-c ×4
game-center ×3
xcode ×2
bluetooth ×1
bonjour ×1
cocoa-touch ×1
core-data ×1
ios4 ×1
leaderboard ×1
p2p ×1
transfer ×1