1

そのため、次のことを解決するのに少し苦労しています。以下に示すコードを使用して、View Controller 間をスキップすることができperformSegueWithIdentifierます。

[self performSegueWithIdentifier:@"toOppHand" sender:self];

ただし、メソッドの長いリストをホストする別のモデル クラスがあり、そのうちのいくつかは上記のコードを使用したいと考えています。明らかに、「self」を使用しても機能しません。これは、viewcontroller クラスに属していないためです。だから、コードを変更するために何をする必要があるのか​​ 疑問に思っています。私はもともとメインView Controllerのオブジェクトをそのように作成しようとしましたが、それも機能しませんでした(「Receiver()には識別子 'toOppHand'のセグエがありません」というエラーが表示されました):

OneViewController* view=[[OnePlayerViewController alloc]init];
[view performSegueWithIdentifier:@"toOppHand" sender:self];

どんな助けでも大歓迎です。

編集:これは、私のプログラムがどのように見えるかのより詳細なビューです。EDIT 2:以下の提案された回答を含む私の編集です。

モデルクラス:

#import "OnePlayerView Controller"

@protocol PlayerDelegate
//I have an error here "expected a type".
- (void)playerNeedsCardFromOpponent:(OnePlayerViewController *)player;

@end

@interface model : NSObject


@property (nonatomic, weak) id<PlayerDelegate> delegate;


-(void)playBill:(NSString*)cardName{
    //modifying name so it works with the method (make the below easier)
    NSString* newName=[cardName stringByReplacingOccurrencesOfString:@" " withString:@""];
    newName=[newName stringByReplacingOccurrencesOfString:@"?" withString:@""];
    newName=[newName stringByReplacingOccurrencesOfString:@"," withString:@""];
    newName=[newName stringByReplacingOccurrencesOfString:@"!" withString:@""];
    newName=[newName stringByReplacingOccurrencesOfString:@";" withString:@""];
    newName=[newName stringByReplacingOccurrencesOfString:@"." withString:@""];
    newName=[newName stringByReplacingOccurrencesOfString:@"'" withString:@""];
    [self performSelector:NSSelectorFromString(newName)];
}

-(void)CardType1{

    OnePlayerViewController* view=[[OnePlayerViewController alloc]init];
    [view performSegueWithIdentifier: @"toOppHand" sender: self];    

}

ビューコントローラー:

- (IBAction)playCard:(id)sender {
    int cellNumber=self.SelectedRowPointer.row;
    NSString* cardType=[[self.CardsinHandPointer.player1_hand objectAtIndex:cellNumber]cardType];
    NSString* cardName=[[self.CardsinHandPointer.player1_hand objectAtIndex:cellNumber]cardName];
    if ([cardType isEqualToString:@"bill"]){
        [self.CardsinHandPointer addCardtoPortfolio:cellNumber forPlayer:1];
        [self.CardsinHandPointer playBill:cardName];
    }
    if ([cardType isEqualToString:@"location"]){
        [self.CardsinHandPointer playLocations:cellNumber forPlayer:1];
    }
    if ([cardType isEqualToString:@"personality"]){
        [self.CardsinHandPointer playPersonalities:cellNumber forPlayer:1];
    }

    [self.navigationController popToRootViewControllerAnimated:YES];
}
4

1 に答える 1