我现在遇到的问题是
我正在调用这个方法: - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
来自vc1
我有来自vc1的string1,但不能在该方法中调用
因为图像委托方法是从另一个类调用的。
当我NSLog(@“%@”,string1);它只显示null
我想从图像委托方法中检索string1。
有谁知道怎么做?非常感谢。
这是来源:
来自ViewController
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
NSString *requestString = [[request URL] absoluteString];
NSLog(@"%@", requestString);
NSArray *components = [requestString componentsSeparatedByString:@":"];
for (int i=0; i< [components count]; i++) {
NSLog(@"components %@", [components objectAtIndex:i]);
}
if([components count] <= 1) {
return YES;
}
if ([(NSString *)[components objectAtIndex:0] isEqualToString:@"toapp"]) {
NSLog(@"toapp %@", [components objectAtIndex:0]);
// 1번째 문자열이 toApp인 경우
if([(NSString *)[components objectAtIndex:1] isEqualToString:@"showphoto"]) {
NSLog(@"showphoto %@", [components objectAtIndex:1]);
// 2번째 문자열이 relationButton인 경우
NSLog(@" objectAtIndex:2 %@", [components objectAtIndex:2]); // param2
pictureName = [components objectAtIndex:2];
//call photo library
picker = [[UIImagePickerController alloc] init];
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
picker.delegate = self;
picker.allowsEditing = NO;
[self presentModalViewController:picker animated:YES];
return NO;
}
}
return YES;
}
我宣布:
NSString *string1;
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
viewcontroller *v = [[viewcontroller alloc]init];
NSLog(@"string1 %@", v.string1);
}
EXC_BAD_ACCESS
来自控制台: string1(null)
我想从控制台看到字符串Helloworld。 我无法从imagePickerController委托方法中调用字符串pictureName。
答案 0 :(得分:0)
NSLog(@"string1 %@", *string1);
不正确
NSLog(@"string1 %@", string1);
更正
格式%@
需要NSString*
而不是NSString
。 string1
是NSString*
。
更新:我注意到您将部件替换为:
viewcontroller *v = [[viewcontroller alloc]init];
NSLog(@"string1 %@", v.string1);
这不正确。您在string1
中初始化viewDidLoad
,但是使用了从未加载的string1
v
。而且我认为你不应该创建一个新的vc对象。如果您需要一个常量字符串,请继续使用@"Helloworld"
。如果需要当前对象的字符串,则应使用self.string1
而不是创建新对象。请注意,Objective-C中没有static variable
。
我们试试这个:
NSString * string1;
; string1 = @"Helloworld";
替换为string1 = [[NSString alloc] initWithFormat:@"%@",@"Helloworld"];
NSLog(@"string1 %@",self.string1);
答案 1 :(得分:0)
viewDidLoad
仅在其视图加载后(顾名思义)调用。当你以某种方式呈现viewController时会发生这种情况。例如。将它推送到UINavigationController,将其添加到UITabBarController或以模态方式呈现它。
如果你想在viewController加载其视图之前使用string1,你应该将string1 = @"Helloworld";
放入init
或initWithNibName:bundle:
或用于初始化第二个viewController的任何内容
顺便说一下,你在viewDidLoad方法的开头忘记了[super viewDidLoad]
你的班级名称错了,他们应该以大写字母开头。
答案 2 :(得分:0)
只需要[保留string1];
不需要viewcontroller * v = [[viewcontroller alloc] init];
感谢。