0

このスレッドと同じ問題があります:このコードで「Missed Method」が発生する原因は何ですか?

しかし、これを解決する方法や、それが問題であるかどうかはわかりません。

「iOS Game Center と Game Kit の入門」という本でチュートリアルを行っていますが、この問題が発生します。私は常に "...Missed Method" を受け取り、その理由を理解しようとしていますが、残念ながら私には理解できません。上記のスレッドの回答も使用しようとしましたが、役に立ちませんでした。

これについて何か助けていただければ幸いです。

私が現在使用しているコード:

#import "GameCenterManager.h"

@implementation GameCenterManager

@synthesize delegate;

+(BOOL)isGameCenterAvailable {
Class gcClass = (NSClassFromString(@"GKLocalPlayer"));

NSString *reqSysVer = @"4.1";
NSString *currSysVer = [[UIDevice currentDevice]systemVersion];

BOOL osVersionSupported = ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending);

return (gcClass && osVersionSupported);
}

-(void)retrieveFriendsList {

if ([GKLocalPlayer localPlayer].authenticated == YES) {
    [[GKLocalPlayer localPlayer]loadFriendsWithCompletionHandler:^(NSArray *friends, NSError *error) {
        [self callDelegateOnMainThread:@selector(friendsFinishLoading:error:) withArg:friends error:error];
    }];
} else {
    NSLog(@"...You must authenticate first");
}
}

-(void)authenticateLocalUser {

if ([GKLocalPlayer localPlayer].authenticated) {
    return;
}

[[GKLocalPlayer localPlayer] authenticateWithCompletionHandler:^(NSError *error){
    [self callDelegateOnMainThread:@selector(processGameCenterAuthentication:) withArg:NULL error: error];
}];
}

-(void)callDelegateOnMainThread:(SEL)selector withArg: (id) arg error:(NSError*) err {
dispatch_async(dispatch_get_main_queue(), ^(void) {
    [self callDelegate:selector withArg: arg error: err];
});
}

-(void)callDelegate: (SEL) selector withArg: (id) arg error: (NSError*) err {
assert([NSThread isMainThread]);

if ([delegate respondsToSelector: selector]) {
    if(arg != NULL) {
        [delegate performSelector: selector withObject: arg withObject: err];

    } else {
        [delegate performSelector: selector withObject: err];
    }
} else {
    NSLog(@"...Missed Method");
}
}

GC 承認後の出力:

...Missed Method
4

1 に答える 1

0

クラスがメソッドを実装しているかどうかをチェック[self callDelegateOnMainThread:@selector(processGameCenterAuthentication:) withArg:NULL error: error];するメソッド ( ) で終わる呼び出しをコーディングします。実装していないように見えるため、出力が得られます。callDelegate:withArg:error:processGameCenterAuthentication:Missed Method

于 2012-12-29T13:32:08.577 に答える