ios - 使用 "performSegueWithIdentifier"发送值时目标值为空

标签 ios iphone

我在一个 View Controller 中有三个导航按钮,其中两个我在本地处理,一个启动编辑 View Controller 。我创建了一个从第一个 UITableView 的主体到目标 View Controller (编辑 View Controller )的导航 Controller 的 segue。 该按钮工作正常(即启动编辑 View )但它没有收到我发送给它的字符串。有人可以帮忙吗?我已经尝试了针对其他相关问题的所有建议,但似乎无法解决这个问题。以下是相关代码。

源 Controller .h:

#import <UIKit/UIKit.h>
#import "EQHorseAddViewController.h"
#import "EQDatabase.h"


@interface EQHorseDetailViewController : UITableViewController

@property (strong, nonatomic) EQHorseAddViewController  *addViewController;

源 Controller .m:

#import "EQHorseDetailViewController.h"

@interface EQHorseDetailViewController ()

@end

@implementation EQHorseDetailViewController

@synthesize addViewController;

-(void)viewDidLoad
{
[super viewDidLoad];

UIBarButtonItem *deleteItem= [[UIBarButtonItem alloc]
    initWithBarButtonSystemItem:UIBarButtonSystemItemTrash
    target:self
    action:@selector(deleteHorse:)];
UIBarButtonItem *editItem = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self
action:@selector(editHorse:)];

NSArray *actionButtonItems = [[NSArray alloc] initWithObjects:deleteItem, editItem,  
nil];
self.navigationItem.rightBarButtonItems = actionButtonItems;
}

-(void)editHorse:(id)sender
{
NSLog(@"EditingHorse");
self.addViewController= [[EQHorseAddViewController alloc] init];
addViewController.resultSegue = @"Edit Horse Details";
[self performSegueWithIdentifier:@"EditHorseDetails" sender: self];
}

目标 View Controller .h:

#import <UIKit/UIKit.h>
#import "EQHorseDetailsInfo.h"
#import "EQDatabase.h"

@class EQHorseAddViewController;

@protocol EQHorseAddViewControllerDelegate <NSObject>
- (void) eqHorseAddViewControllerDidCancel:(EQHorseAddViewController *)controller;
- (void)eqHorseAddViewControllerDidSave: (EQHorseAddViewController *)controller;
@end

@interface EQHorseAddViewController : UITableViewController   
<EQHorseAddViewControllerDelegate>

@property (strong, nonatomic) EQHorseAddViewController *addViewController;

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

@property (strong,nonatomic) NSString *resultSegue;

目标 View Controller .m

#import "EQHorseAddViewController.h"
#import "EQDatabase.h"
#import "EQHorseDetailsInfo.h"

@interface EQHorseAddViewController ()

@end

@implementation EQHorseAddViewController

@synthesize resultSegue;

- (void)viewDidLoad
{

 NSLog(@"resultSegue %@",resultSegue);

 }

在此先感谢您。

最佳答案

看起来您指的是 editHorse: 中的代码,它分配一个 EQHorseAddViewController 并在其上设置一个属性。该代码的问题在于它分配的 View Controller 与 segue 的 vc 目的地无关。该方法只是创建一个 vc,然后立即将其丢弃。

删除分配并改为执行 prepareForSegue:。传递给该方法的 segue 对象将有一个名为 destinationViewController 的属性。那是即将被推送到导航上的 View Controller 。这是您应该设置 resultSegue 属性的那个。

-(void)editHorse:(id)sender
{
    NSLog(@"EditingHorse");
    [self performSegueWithIdentifier:@"EditHorseDetails" sender: self];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"EditHorseDetails"]) {
        EQHorseAddViewController *vc = segue.destinationViewController;
        vc.resultSegue = @"Edit Horse Details";
    }
}

关于ios - 使用 "performSegueWithIdentifier"发送值时目标值为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21947024/

相关文章:

ios - 填充 UISearchBarController 结果 TableView 时遇到问题

android - iOS/Android 商店并从相应商店之外购买积分(无应用内购买)

iphone - iOS 应用程序和 Windows 身份验证

iphone - unix 时间戳到几小时前

iphone - UIModalTransitionStylePartialCurl 半页

iphone - 保存到 CoreData - 添加到顶部

ios - 如何在所有 View Controller 中访问AVAudioPlayer?

iphone - 如何将 UILocatNotification 设置为每天早上 9 点触发

iphone - 我们如何从 iPhone Camera 获取 H.264 编码的视频流?

iphone - 在带有 Storyboard 的 XCode 4 中以模态方式推送 View 时出现 "Unbalanced calls to begin/end appearance transitions"警告