【问题标题】:data not passing between view Controllers cannot solve视图控制器之间不传递的数据无法解决
【发布时间】:2014-04-21 09:23:16
【问题描述】:

我试图在两个视图控制器之间传递一个字符串,第一个名为 DetailController,第二个名为 VideoController。它们使用 push segue 与按钮连接。正在调用我的“prepareForSegue”方法,但是该字符串在 VideoController 中返回为 null。我被这个问题困扰了很久,仍然找不到解决方案。任何帮助将不胜感激。

DetailController.m prepareForSegue 方法

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{   NSString *myString=self.city.camera;
    NSLog(@"%@", myString);
    NSString *see=@"what is going on?";
    NSLog(@"%@", see);

    VideoController *video= (VideoController *) segue.destinationViewController;
    video.cam= self.city.camera;

}

视频控制器.m

#import "VideoController.h"
#import "City.h"
#import "DetailController.h"
#import "ViewController.h"

@interface VideoController ()

@end

@implementation VideoController
@synthesize webView,city,cam;



- (void)viewDidLoad
{
    NSString *see = self.cam;
    NSLog(@"%@", see);

    [super viewDidLoad];
    // Do any additional setup after loading the view.

    [self performSelector:@selector(yourMethod) withObject:nil afterDelay:10.0];





    NSString * html = [NSString stringWithFormat:@"<img name=\"Cam\" src=\"%@\" width=\"110%%\"  height=\"100%%\" alt=\"Live Feed\" style=\"background-color: #000000\" />", cam];

    [webView loadHTMLString:html baseURL:nil];

}
-(void)yourMethod
{
    [self.navigationController popViewControllerAnimated:YES];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

这是我在按下按钮并发生转场时收到的消息。如果我正确阅读它,当它应该来自不同的webView时,(null)将由与其他两个字符串相同的webView返回?我完全被这个问题迷失了

2014-04-21 02:20:23.093 webView[47963:1a303] http://admin:*******@192.168.1.80/video.cgi/
2014-04-21 02:20:23.094 webView[47963:1a303] what is going on?
2014-04-21 02:20:23.102 webView[47963:1a303] (null)

这是我的 VideoController.h 文件,您可以看到 sam 设置为 strong,我是否遗漏了什么?

#import <UIKit/UIKit.h>
#import "DetailController.h"
@class City;
@interface VideoController : UIViewController{
IBOutlet UIWebView *webView;
IBOutlet UIImageView *image;



}
@property (strong,nonatomic) City *city;
@property (strong, nonatomic)NSString * cam;
@property(nonatomic,retain) UIWebView *webView;


@end

【问题讨论】:

    标签: objective-c null push segue


    【解决方案1】:

    看我的评论:

    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    {   
       NSString *myString=self.city.camera;
       NSLog(@"%@", myString);
       NSString *see=@"what is going on?";
       NSLog(@"%@", see);
    
       VideoController *video= (VideoController *) segue.destinationViewController;
       // be sure that self.city.camera is has value 
       // I think you assign nil to video.cam
       video.cam= self.city.camera;
    }
    

    【讨论】:

    • 是的 self.city.camera 确实具有正确的值,因为 NSString *myString=self.city.camera; NSLog(@"%@", myString);正在返回正确的字符串
    【解决方案2】:

    确保您的“cam”属性没有分配弱属性,否则它可能会在您需要之前被释放。更好的是,发布您的 VideoController.h 代码。

    【讨论】:

    • 我已经发布了我的 VideoController.h 代码,你可以看到它被设置为 strong。我还有什么遗漏的吗?
    • 经过半个多小时的挣扎,我仍然无法重新创建您的错误。无论我对代码做了什么疯狂的事情,“cam”数据都可以正常传递并正确记录。您可能想要“清理”并重新构建,或者关闭并重新启动您的 Xcode,或者重新启动您的 Mac。
    • 非常感谢您的努力,我也不明白为什么会遇到此错误。我会继续努力,看看能不能解决。
    • 我确实有另一个视图控制器,它是我故事板中的第一个视图,细节控制器实际上是第二个视图,它从第一个视图控制器获取“城市”信息。我从第一个视图控制器推送细节控制器的方式是否可能影响 DetailController 和 VideoController 之间的数据传递?
    • 不,不应该,因为您已经表明它正在正确记录。问题在于从细节 VC 到视频 VC。顺便说一句,它是自定义转场还是模态转场?我在想这可能会导致奇怪的行为。
    猜你喜欢
    • 2011-07-09
    • 2023-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多