如何在目标c中将self传递给其他类

use*_*304 1 facebook class objective-c social-framework

嗨,我是iOS开发的新手.我创建了名为socialClass.h的类

#import <Social/Social.h>
#import <Accounts/Accounts.h>

- (void)facebookSharingStatusCheckCall:(NSString *)url image:(NSString *)img status:(NSString *)text viewCont:(UIViewController *)uiVew;

- (void)facebookForIosSix:(NSString *)url image:(NSString *)img status:(NSString *)text viewCont:(UIViewController *)uiVew;
Run Code Online (Sandbox Code Playgroud)

并在socialClass.m

    - (void)facebookSharingStatusCheckCall:(NSString *)url image:(NSString *)img status:(NSString *)text viewCont:(UIViewController *)uiVew 
{
    if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) {
        NSLog(@"service available");

     [self facebookForIosSix:url image:img status:text viewCont:uiVew];

    } else {
        // facebook for iOS 5 function will be called here
    }
}


-(void)facebookForIosSix:(NSString *)url image:(NSString *)img status:(NSString *)text viewCont:(UIViewController *)uiVew
{


if([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) {

        SLComposeViewController *fbcontroller = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];

    SLComposeViewControllerCompletionHandler myBlock = ^(SLComposeViewControllerResult result){
        if (result == SLComposeViewControllerResultCancelled) {

                NSLog(@"Post Cancelled");

            } else

            {
                NSLog(@"Post Done");
            }

            [fbcontroller dismissViewControllerAnimated:YES completion:Nil];
        };
        fbcontroller.completionHandler =myBlock;

        //Adding the Text to the facebook post value from iOS
        [fbcontroller setInitialText:text];

        //Adding the URL to the facebook post value from iOS

        [fbcontroller addURL:[NSURL URLWithString:url]];

        //Adding the Image to the facebook post value from iOS

        [fbcontroller addImage:[UIImage imageNamed:img]];
        [uiVew presentViewController:fbcontroller animated:YES completion:nil];


    }
    else{
        UIAlertView *alertView = [[UIAlertView alloc]
                                  initWithTitle:@"Sorry"
                                  message:@"You can't Post a Status right now, make sure                                  your device has an internet connection and you have                                  at least one Twitter account setup"
                                  delegate:nil
                                  cancelButtonTitle:@"OK"
                                  otherButtonTitles:nil];
        [alertView show];

        NSLog(@"UnAvailable");
    }


}
Run Code Online (Sandbox Code Playgroud)

现在我调用mainViewController.h

#import "socialClass.h"
Run Code Online (Sandbox Code Playgroud)

并在mainViewController.m中

- (IBAction)facebookShareBtn:(id)sender {

    [[socialClass facebookSharingStatusCheckCall:[[DataPassing sharedManager] pageURL ]
        image:[[DataPassing sharedManager]
        pageIMGurl]
        status:[[DataPassing sharedManager] pageTEXT]]
        viewCont:(UIViewController*)self];
}
Run Code Online (Sandbox Code Playgroud)

当我使用下面的代码与self时它会出错.绝对是因为没有自我观点

[self presentViewController:fbcontroller animated:YES completion:nil]; 所以我把uiView放在函数中并尝试从mainViewController传递self.主视图中再次出错

如何在mainviewcontroller中使用来自其他调用函数的这个facebook.谢谢

[编辑]

我在mainViewController中声明socialClass.h并在按钮中调用该函数[socialClass facebookForIosSix:...]

在此输入图像描述

更新到(UIViewController*)self后,此错误正在...

Fog*_*ter 5

好的,在功能定义中需要改变一些事情.

首先你需要一个 - 在前面而不是+.加号表示类方法,而 - 表示实例方法.您正在使用它像实例方法.

其次,您需要在SocialClass.h文件中包含MainViewController.h.然后将函数命名为...

- (void)facebookForIosSix:(NSString *)url image:(NSString *)img status:(NSString *)text viewCont:(MainViewController *)mainViewController;
Run Code Online (Sandbox Code Playgroud)

然后在mainViewController中你可以运行...

[socialViewController facebookSharingStatusCheckCall:@"url"  image:@"hello.png" status:@"Posting from App" viewCont:self];
Run Code Online (Sandbox Code Playgroud)

这应该工作正常.

编辑

如果要从多个位置运行该函数,则不要导入MainViewController.h并定义函数,如...

- (void)facebookForIosSix:(NSString *)url image:(NSString *)img status:(NSString *)text viewCont:(UIViewController *)viewController;
Run Code Online (Sandbox Code Playgroud)

然后运行它...

[socialViewController facebookSharingStatusCheckCall:@"url"  image:@"hello.png" status:@"Posting from App" viewCont:(UIViewController*)self];
Run Code Online (Sandbox Code Playgroud)

TBH,我认为你根本不需要施放它,只是为了安全起见.

编辑

你没有平衡括号......

- (IBAction)facebookShareBtn:(id)sender {

    [socialClass facebookSharingStatusCheckCall:[[DataPassing sharedManager] pageURL ]
        image:[[DataPassing sharedManager] pageIMGurl]
        status:[[DataPassing sharedManager] pageTEXT]
        viewCont:(UIViewController*)self];
}
Run Code Online (Sandbox Code Playgroud)

这会奏效.