そのため、次のことを解決するのに少し苦労しています。以下に示すコードを使用して、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];
}