iOS会对未传递的数据进行分段

时间:2014-04-10 08:43:43

标签: ios objective-c uiviewcontroller

数据没有从一个VC传递到另一个VC,在我的生活中无法解决这个问题。我尝试传递NSURL或NSURLRequest,当我在第二个VC上注销请求/ url对象时,我得到null。

第一个VC.h

#import <UIKit/UIKit.h>
#import "ILAuthClient.h"
#import "ILAuthLoginViewController.h"

@interface ILViewController : UIViewController 

@property (strong, nonatomic) NSString *string;
@property (strong, nonatomic) NSURL *request;
@end

第一个VC.m(相关部分)

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if ([segue.identifier isEqualToString:@"authLogin"]){
        NSURL *url = [self authenticateWithInstagram];
        ILAuthLoginViewController *authModal = [[ILAuthLoginViewController alloc]init];
        authModal.delegate = self;
        authModal.url = url;}

第二个VC.h

#import <UIKit/UIKit.h>

@interface ILAuthLoginViewController : UIViewController <UIWebViewDelegate>

@property (strong, nonatomic) IBOutlet UIWebView *webView;
@property (strong, nonatomic) NSURLRequest *request;
@property (strong, nonatomic) NSURL *url;
@property (strong, nonatomic) NSString *string;

@end

第二个VC.m

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.webView.delegate = self;
    self.request = [[NSURLRequest alloc]initWithURL:self.url];

    [self.webView loadRequest:self.request];
    NSLog(@"Request %@", self.request);

}

3 个答案:

答案 0 :(得分:3)

这一行...

    ILAuthLoginViewController *authModal = [[ILAuthLoginViewController alloc]init];

应更改为此

    ILAuthLoginViewController * authModal = (ILAuthLoginViewController *) segue.destinationViewController;

alloc的那个人不是故事板所呈现的那个

答案 1 :(得分:3)

当您输入prepareForSegue时,您的第二个视图控制器已经为您分配,并且可以作为segue上的destinationViewController属性使用。您正在分配一个新属性并分配属性,但不使用此对象。

你的方法应该是

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if ([segue.identifier isEqualToString:@"authLogin"]){
        NSURL *url = [self authenticateWithInstagram];
        ILAuthLoginViewController *authModal = (ILAuthLoginViewController *)segue.destinationViewController;
        authModal.delegate = self;
        authModal.url = url;
   }
}

答案 2 :(得分:3)

要检查两件事。

1.通过segue时你的电话是错误的。它应该是

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
        if ([segue.identifier isEqualToString:@"authLogin"]){
            NSURL *url = [self authenticateWithInstagram];
            ILAuthLoginViewController *authModal = (ILAuthLoginViewController *)segue.destinationViewController;
            authModal.delegate = self;
            authModal.url = url;
        }
 }

2.确保您的url string格式正确。

NSURL *url = [NSURL URLWithString:[@"YOURURL" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

希望它有所帮助。