Ios 目标c在视图控制器之间解析XML数据
我对objective-c相当陌生,需要一些挑战技巧 我有2个视图控制器,需要将从FirstViewController检索到的xml数据显示给TermsViewController 我成功地获得了用户输入并检索了所需的xml对象。 但是不知道如何在TermsViewController.m中显示用户名Ios 目标c在视图控制器之间解析XML数据,ios,objective-c,xml,nsxmlparser,Ios,Objective C,Xml,Nsxmlparser,我对objective-c相当陌生,需要一些挑战技巧 我有2个视图控制器,需要将从FirstViewController检索到的xml数据显示给TermsViewController 我成功地获得了用户输入并检索了所需的xml对象。 但是不知道如何在TermsViewController.m中显示用户名 #import "FirstViewController.h" #import "TermsViewController.h" #import "XMLReader.h" @interfac
#import "FirstViewController.h"
#import "TermsViewController.h"
#import "XMLReader.h"
@interface FirstViewController ()
@property (nonatomic, strong) NSMutableURLRequest *postRequest;
@property NSUInteger responseStatusCode;
@property (nonatomic, strong) NSString *theXML;
@end
@implementation FirstViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
- (IBAction)accessButton:(UIButton *)sender {
self.codeUser = self.codeField.text;
NSString *xmlCode = [NSString stringWithFormat:
@"<?xml version='1.0' encoding='utf-8'?>\n"
"<soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'>"
"<soap:Body>\n"
"<GetInterview xmlns='http://www.url.com/url.JCV'>\n"
"<Codigo>"
"%@"
"</Codigo>\n"
"</GetInterview>\n"
"</soap:Body>\n"
"</soap:Envelope>", self.codeUser];
NSLog(@"User code is: %@", self.codeUser);
NSLog(@"XML is: %@", xmlCode);
self.postRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://www.url.com/url.JCV/web.url.asmx"]];
[self.postRequest setValue:@"text/xml" forHTTPHeaderField:@"Content-Type"];
[self.postRequest setHTTPMethod:@"POST"];
[self.postRequest setHTTPBody:[NSMutableData dataWithBytes:[xmlCode UTF8String] length:strlen([xmlCode UTF8String])]];
NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:self.postRequest delegate:self];
if (conn) {
NSLog(@"Connected to: %@", conn);
} else {
NSLog(@"Connection Error");
}
[self.codeField resignFirstResponder];
}
#import "TermsViewController.h"
@interface TermsViewController ()
@end
@implementation TermsViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.nameLabel.text = self.nameUserTerms;
//this check is returning NULL
NSLog(@"User name: %@", self.nameUserTerms);
}
@end
由于数据是异步下载的,因此无法确定如何在IOS 6上实现此功能
提前谢谢
FirstViewController.h
#import <UIKit/UIKit.h>
@interface FirstViewController : UIViewController
@property (weak, nonatomic) IBOutlet UIButton *accessButton;
@property (weak, nonatomic) IBOutlet UITextField *codeField;
@property (weak, nonatomic) NSString *codeUser;
@property (strong, nonatomic) NSString *nameUser;
@property (strong, nonatomic) NSDictionary *xmlDictionary;
@end
#import <UIKit/UIKit.h>
@interface TermsViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *nameLabel;
@property (strong, nonatomic) NSString *nameUserTerms;
@end
TermsViewController.m
#import "FirstViewController.h"
#import "TermsViewController.h"
#import "XMLReader.h"
@interface FirstViewController ()
@property (nonatomic, strong) NSMutableURLRequest *postRequest;
@property NSUInteger responseStatusCode;
@property (nonatomic, strong) NSString *theXML;
@end
@implementation FirstViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
- (IBAction)accessButton:(UIButton *)sender {
self.codeUser = self.codeField.text;
NSString *xmlCode = [NSString stringWithFormat:
@"<?xml version='1.0' encoding='utf-8'?>\n"
"<soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'>"
"<soap:Body>\n"
"<GetInterview xmlns='http://www.url.com/url.JCV'>\n"
"<Codigo>"
"%@"
"</Codigo>\n"
"</GetInterview>\n"
"</soap:Body>\n"
"</soap:Envelope>", self.codeUser];
NSLog(@"User code is: %@", self.codeUser);
NSLog(@"XML is: %@", xmlCode);
self.postRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://www.url.com/url.JCV/web.url.asmx"]];
[self.postRequest setValue:@"text/xml" forHTTPHeaderField:@"Content-Type"];
[self.postRequest setHTTPMethod:@"POST"];
[self.postRequest setHTTPBody:[NSMutableData dataWithBytes:[xmlCode UTF8String] length:strlen([xmlCode UTF8String])]];
NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:self.postRequest delegate:self];
if (conn) {
NSLog(@"Connected to: %@", conn);
} else {
NSLog(@"Connection Error");
}
[self.codeField resignFirstResponder];
}
#import "TermsViewController.h"
@interface TermsViewController ()
@end
@implementation TermsViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.nameLabel.text = self.nameUserTerms;
//this check is returning NULL
NSLog(@"User name: %@", self.nameUserTerms);
}
@end
您应该使用
prepareforsgue
在控制器之间交换数据
从代码中删除以下行:
TermsViewController *nv = [[TermsViewController alloc] init];
nv.nameUserTerms = self.nameUser;
把它们放在这样一个方法中:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"goToTerms"]) {
TermsViewController *nv = segue.destinationViewController;
nv.nameUserTerms = self.nameUser;
}
}
让它工作起来。我需要设置TermsViewController*nv=segue.destinationViewController;正如你所说。谢谢