从imagePickerController委托方法调用视图控制器字符串

时间:2011-12-23 10:38:02

标签: iphone delegates

我现在遇到的问题是

我正在调用这个方法: - (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。

3 个答案:

答案 0 :(得分:0)

NSLog(@"string1 %@", *string1);不正确 NSLog(@"string1 %@", string1);更正

格式%@需要NSString*而不是NSStringstring1NSString*


更新:我注意到您将部件替换为:

viewcontroller *v = [[viewcontroller alloc]init];
NSLog(@"string1 %@", v.string1);

这不正确。您在string1中初始化viewDidLoad,但是使用了从未加载的string1 v。而且我认为你不应该创建一个新的vc对象。如果您需要一个常量字符串,请继续使用@"Helloworld"。如果需要当前对象的字符串,则应使用self.string1而不是创建新对象。请注意,Objective-C中没有static variable

我们试试这个:

  1. 确保您在vc的.h文件中写了NSString * string1;;
  2. string1 = @"Helloworld";替换为string1 = [[NSString alloc] initWithFormat:@"%@",@"Helloworld"];
  3. 使用NSLog(@"string1 %@",self.string1);
  4. 替换委托方法的正文

答案 1 :(得分:0)

viewDidLoad仅在其视图加载后(顾名思义)调用。当你以某种方式呈现viewController时会发生这种情况。例如。将它推送到UINavigationController,将其添加到UITabBarController或以模态方式呈现它。

如果你想在viewController加载其视图之前使用string1,你应该将string1 = @"Helloworld";放入initinitWithNibName:bundle:或用于初始化第二个viewController的任何内容


顺便说一下,你在viewDidLoad方法的开头忘记了[super viewDidLoad] 你的班级名称错了,他们应该以大写字母开头。

答案 2 :(得分:0)

只需要[保留string1];

不需要viewcontroller * v = [[viewcontroller alloc] init];

感谢。