您可以使用addRecipientsWithPlayerID作为配置GKFriendRequestComposeViewController的一部分,如Apple的此示例中所示:
- (void) inviteFriends: (NSArray*) identifiers
{
GKFriendRequestComposeViewController *friendRequestViewController = [[GKFriendRequestComposeViewController alloc] init];
friendRequestViewController.composeViewDelegate = self;
if (identifiers)
{
[friendRequestViewController addRecipientsWithPlayerIDs: identifiers];
}
[self presentModalViewController: friendRequestViewController animated: YES];
[friendRequestViewController release];
}
Run Code Online (Sandbox Code Playgroud)
我对这整个命题感到困惑.据说,您通过将一些PlayerID传递给请求来邀请朋友.但是你只能从已经是朋友的玩家那里获得玩家ID.因此,您不能邀请人们成为不是朋友的朋友,您只能邀请人们成为已经是朋友的朋友.这种方法有什么意义; 它是如何工作的?
我知道有一个等效的电子邮件地址或只是留空,但我试图了解这种方法的目的是什么.它似乎毫无用处,这意味着我遗漏了一些关于朋友请求如何工作的非常关键的事实.感谢任何建立了这个并且可以解决问题的人.
假设我有一个方法,如:
- (void)reassignPassedObject:(void *)block;
Run Code Online (Sandbox Code Playgroud)
它被称为
NSLog(@"self 1: %@", self);
[myController reassignPassedObject:^(){return self;}];
NSLog(@"self 2: %@", self);
Run Code Online (Sandbox Code Playgroud)
我想将“self”引用重新分配给另一个对象,如下所示:
- (void)reassignPassedObject:(void *)block {
id holder = block();
if ( YES ) {
id newObject = nil; //or NSString or NSArray
//do something such that output second log is "self 2: (newObject...)"
}
}
Run Code Online (Sandbox Code Playgroud)
这可能吗?
看起来这应该是公平的游戏,因为我们只是在谈论重新分配指针。我会担心特定实现中的释放/保留。这里让我感到困惑的挑战是:
想法?
我在两个应用程序(一个iOS,另一个Mac)之间有一个工作设置,它们都将文件放在普遍存储容器中,并使用NSMetadataQuery监视该容器.在大多数情况下,查询几乎在文件设置后立即更新:目录中为YES.
然而,相对于另一个令人讨厌的iCloud错误,它可以导致容器在同步时自动清空(自动,而不是由应用程序或用户),一旦应用程序之间的"干净设置"被所述错误查询破坏 - 在仅限iPhone方面 - 不再更新.
如果我将文件添加到iPhone上的容器中,Mac会立即看到它们.但如果我在Mac端添加文件,iPhone永远不会更新.如果我使用计时器和文件管理器扫描容器,我可以确认文件列在内容中.这是不能识别它们的查询.
虽然我认为这不是代码问题,但我会将其包含在此处.我认为这是一个"iCloud is beta(at best)"问题,我想知道是否有人可以回答这个问题:由于退出并重新启动应用程序确实导致查询更新,有没有人知道如何强制 NSMetadataQuery更新? 删除它并制作另一个没有任何作用.
这是查询代码(我告诉你它正确报告给任何NSNotification监视器):
self.query = [[[NSMetadataQuery alloc] init] autorelease];
[query setDelegate:self];
[query setSearchScopes:[NSArray arrayWithObject:NSMetadataQueryUbiquitousDocumentsScope]];
[query setPredicate:[NSPredicate predicateWithFormat:@"%K like[cd] %@", NSMetadataItemFSNameKey, @"*"]];
[query startQuery];
Run Code Online (Sandbox Code Playgroud)
这是轮询代码(我告诉你它说文件夹中有文件):
- (void)pollUbiquitousStore:(NSTimer *)aUbiquitousStoreMonitor {
//Query update
NSArray *topLevelCloudContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:[self.fileController.cloudFolderURL.path stringByAppendingPathComponent:@"Documents"] error:nil];
NSLog(@"known iCloud url: %@ contents: %@", self.fileController.cloudFolderURL, topLevelCloudContents);
Run Code Online (Sandbox Code Playgroud)
这是我查看查询的地方(一旦系统被清洗,我得到的结果除外):
//Refresh
id queryGatheringObserver = [[NSNotificationCenter defaultCenter] addObserverForName:NSMetadataQueryGatheringProgressNotification object:aQuery queue:nil usingBlock:^(NSNotification *note) {
refresh((NSMetadataQuery *)[note object]);
}];
id queryUpdateObserver = [[NSNotificationCenter …Run Code Online (Sandbox Code Playgroud) ObjC
[MyObject doThisWithString:string?: [MyObject otherString]];
Run Code Online (Sandbox Code Playgroud)
我怎么能在Swift中做到这一点?
extension MyObject {
func doThisWithString(string: String?) {
... <- assume defined
}
func otherString() -> String {
return ... <- assume defined
}
}
var MyInstance: MyObject
...
MyInstance.doThisWithString(myStringVar?: MyInstance.otherString()) <- how do I do this?
Run Code Online (Sandbox Code Playgroud)