我使用xcode在SpriteKit
创建了一个应用程序,当游戏结束时,它会显示您的分数,并且我想添加该功能以将您的分数发布到Facebook。几乎所有代码都在MyScene.m
,无法访问presentViewController
。只有我的ViewController.m文件可以访问它,所以我尝试从Myscene.m调用Viewcontroller中的实例方法,但我找不到办法。我发现从其他文件调用方法的唯一方法是使用+(void)
这是我认为的类方法。
Myscene.m:
if (location.x < 315 && location.x > 261 && location.y < 404 && location.y > 361) {
//if you click the post to facebook button (btw, location is a variable for where you tapped on the screen)
[ViewController facebook];
}
ViewController.m:
+(void)facebook{
if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) {
SLComposeViewController *facebook = [[SLComposeViewController alloc] init];
facebook = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
[facebook setInitialText:@"initial text"];
}
}
这样有效,并且它正确地调用了facebook类方法,但是当我将[self presentViewController:facebook animated:YES]
放在setInitialText括号之后时,它给了我这个错误:没有已知的选择器类方法#presentventController:animated: &#39;
顺便说一下,它允许我在实例方法中使用presentViewController
但我无法从类方法或我的Myscene文件中调用该方法。有没有办法从另一个文件调用实例方法,或从类方法访问presentViewController
?谢谢
答案 0 :(得分:3)
您可以将View Controller的引用传递给SKScene,也可以使用NSNotificationCenter
。我更喜欢使用后者。
首先确保已将Social.framework添加到项目中。
将社交框架导入View Controller #import <Social/Social.h>
然后在View Controller的viewDidLoad方法中添加以下代码:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(createPost:)
name:@"CreatePost"
object:nil];
接下来将此方法添加到View Controller:
-(void)createPost:(NSNotification *)notification
{
NSDictionary *postData = [notification userInfo];
NSString *postText = (NSString *)[postData objectForKey:@"postText"];
NSLog(@"%@",postText);
// build your tweet, facebook, etc...
SLComposeViewController *mySLComposerSheet = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
[self presentViewController:mySLComposerSheet animated:YES completion:nil];
}
在SKScene的适当位置,(赢得比赛,输掉游戏等...)添加以下代码:
NSString *postText = @"I just beat the last level.";
NSDictionary *userInfo = [NSDictionary dictionaryWithObject:postText forKey:@"postText"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"CreatePost" object:self userInfo:userInfo];
上面的代码发送带有文本的NSNotification,View Controller将从中获取并执行指定的方法。