вызов строки контроллера представления из метода делегата imagePickerController - PullRequest
0 голосов
/ 23 декабря 2011

проблема, с которой я сейчас сталкиваюсь:

Я вызываю этот метод: - (void) imagePickerController: (UIImagePickerController *) picker didFinishPickingMediaWithInfo: (NSDictionary *) info

изvc1

У меня есть строка1 из vc1, но она не может быть вызвана внутри этого метода

, потому что этот метод делегата изображения вызывается из другого класса.

Когда я NSLog (@"% @", строка1);он показывает только 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 из консоли.Я не могу вызвать строку pictureName изнутри метода делегата imagePickerController.

Ответы [ 3 ]

0 голосов
/ 23 декабря 2011

viewDidLoad вызывается только после того, как (как следует из названия) было загружено его представление.Это происходит, когда вы представляете viewController как-то.Например, отправить его в UINavigationController, добавить его в UITabBarController или представить его модально.

Если вы хотите использовать строку1 до того, как ваш viewController загрузит свой вид, вы должны поместить string1 = @"Helloworld"; в init или initWithNibName:bundle: или все, что вы используете для инициализации вашего второго viewController


Кстати, вы забыли [super viewDidLoad] в начале вашего метода viewDidLoad.
И имена ваших классов неправильные, они должны начинаться с заглавной буквы.

0 голосов
/ 24 декабря 2011

просто нужно было сделать [сохранить строку1];

не нужен viewcontroller * v = [[viewcontroller alloc] init];

спасибо.

0 голосов
/ 23 декабря 2011

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.

Давайте попробуем это:

  1. убедитесь, что у вас есть запись NSString * string1; в .h файле vc;
  2. заменить string1 = @"Helloworld";
    на string1 = [[NSString alloc] initWithFormat:@"%@",@"Helloworld"];
  3. заменить тело метода делегата на NSLog(@"string1 %@",self.string1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...