我试图让玩家在游戏结束时通过短信分享他们的分数。
我已将框架导入到我的项目中。在我的viewController.h文件中导入。
这是我的viewController.h文件
#import <UIKit/UIKit.h>
#import <SpriteKit/SpriteKit.h>
#import <MessageUI/MessageUI.h>
@interface myViewController : UIViewController <MFMessageComposeViewControllerDelegate> {
}
@end
我也尝试像这样导入MyScene.h:
#import <MessageUI/MessageUI.h>
@interface MyScene : SKScene <MFMessageComposeViewControllerDelegate> {
}
当我想显示SMS共享时,我在MyScene.m文件中使用此代码
MFMessageComposeViewController *textComposer = [[MFMessageComposeViewController alloc] init];
[textComposer setMessageComposeDelegate:self];
if ([MFMessageComposeViewController canSendText]) {
[textComposer setRecipients:[NSArray arrayWithObject:nil]];
[textComposer setBody:@"Happy Happy Joy Joy!"];
[self presentViewController:textComposer animated:YES completion:NULL];
} else {
NSLog(@"Cant send text!");
}
但是在这一行
[self presentViewController:textComposer animated:YES completion:NULL];
我得到一个&#34;没有可见的@interface为&#39; MyScene&#39;声明选择器&#39; presentViewController:animated:completion:&#39;&#34;错误。
我试图搜索过去几个小时。试试上帝知道其他帖子/教程有多少变化和例子(这对于学习与此无关的一些事情很好)。似乎没有什么工作。我开始用尽头发拔出来。所以任何帮助都会很棒。我相信你们中的一些大师这里应该是在公园散步。感谢。
编辑:我没有使用故事板,或按钮/菜单/游戏等视图控制器...因此我无法从viewController本身调用该函数。修改 所以我尝试了Paulw11在他的链接中提出的建议。现在我有以下错误。
myViewController中的
MyScene.MyViewController = self;
我得到了一个&#34;属性&#39; MyViewController&#39;没有找到类型&#39; MyScene&#39;&#34;错误
也在MyScene.m
- (void)sendToController
{
NSLog(@"ok");
// use the already-created spriteViewController
[_MyViewController sendSMS];
}
[_ MyViewController sendSMS];我得到了一个&#34;没有可见的@interface用于&#39; MyViewController&#39;声明选择器&#39; SendSMS&#39;&#34;
编辑2: * 编辑2: * 编辑2: * 编辑2: *
我得到它打开短信。小问题,它不允许我解雇/取消。
这是我的sendSMS代码:
-(void) sendSMS {
MFMessageComposeViewController *textComposer = [[MFMessageComposeViewController alloc] init];
[textComposer setMessageComposeDelegate:self];
if ([MFMessageComposeViewController canSendText]) {
[textComposer setRecipients:[NSArray arrayWithObject:@" "]];
NSString *body = [NSString stringWithFormat:@"Happy Day!: %i. ", _score];
[textComposer setBody:body];
UIViewController *vc = self.view.window.rootViewController;
[vc presentViewController: textComposer animated: YES completion:nil];
} else {
NSLog(@"Cant send text!");
}
}
这是我的解雇代码:
-(void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result {
UIViewController *vc = self.view.window.rootViewController;
[vc dismissViewControllerAnimated:YES completion:NULL];
}
编辑3
以下代码在正确的时间给我NSLog,但不会关闭窗口。
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller
didFinishWithResult:(MessageComposeResult)result
{
UIViewController *vc = self.view.window.rootViewController;
// Notifies users about errors associated with the interface
switch (result)
{
case MessageComposeResultCancelled:
NSLog(@"Result: SMS sending canceled");
break;
case MessageComposeResultSent:
NSLog(@"Result: SMS sent");
break;
case MessageComposeResultFailed:
NSLog(@"Result: SMS sending failed");
break;
default:
NSLog(@"Result: SMS not sent");
break;
}
[vc dismissViewControllerAnimated:YES completion:NULL];
}
答案 0 :(得分:2)
如果您引用MFMessageComposeViewController Class Reference,则会看到您需要使用presentModalViewController:animated:
以模态方式呈现它。一旦完成,您还有责任通过delegate对象解雇它。
我建议您查看Message Composer sample code,了解使用MFMessageComposeViewController
类的示例。
更新
您可以关闭传递给委托方法的视图控制器 -
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller
didFinishWithResult:(MessageComposeResult)result
{
// Notifies users about errors associated with the interface
switch (result)
{
case MessageComposeResultCancelled:
NSLog(@"Result: SMS sending canceled");
break;
case MessageComposeResultSent:
NSLog(@"Result: SMS sent");
break;
case MessageComposeResultFailed:
NSLog(@"Result: SMS sending failed");
break;
default:
NSLog(@"Result: SMS not sent");
break;
}
[controller dismissViewControllerAnimated:YES completion:NULL];
}