2011-12-23 2 views
0

проблема у меня прямо сейчасвызова вид контроллера строки из метода делегата imagePickerController

Я звоню этот метод: - (Недействительными) imagePickerController: (UIImagePickerController *) Высотные didFinishPickingMediaWithInfo: (NSDictionary *) Информация

из VC1

у меня есть строку1 от VC1, но это нельзя назвать внутри этого метода

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

Когда я NSLog (@ "% @", строка1); он показывает только нуль

Я хочу извлечь строку1 изнутри метода делегата изображения.

Кто-нибудь знает, как это сделать? Большое спасибо.

вот источник:

От 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 с консоли. Я не могу вызвать string pictureName из метода делегата imagePickerController.

+0

Вы пробовали self.string1? И если вы отлаживаете и открываете собственную часть, можете ли вы увидеть строку Helloworld? – CyberK

+0

Я думаю, что это потому, что метод делегата вызывается из другого класса, потому что он говорит, что exec плохой доступ к string1 мне нужно знать, как вызвать string1 из класса diff –

+0

как удалить сообщение? Я допустил ошибку. –

ответ

0

NSLog(@"string1 %@", *string1); неправильно
NSLog(@"string1 %@", string1); правильно

Формат %@ нужен NSString* вместо NSString. string1 - NSString*.


Update: Я заметил, что вы заменить часть с:

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

Это не правильно. Вы инициализируете string1 в viewDidLoad, но вы используете string1v, который никогда не был загружен. И я не думаю, что вы должны создать новый объект 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);
+0

Абсолютно правильно. Но просто чтобы вы знали, вопрос уже изменился. Я просто публикую это, поэтому никто не дает вам -1, потому что ваш ответ не имеет смысла с пересмотренным вопросом. –

+0

Спасибо Matthias. Вопрос изменился, когда я печатал свой предыдущий ответ. Как смущающе ... – Skyler

+0

ответ обновлен. – Skyler

0

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

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


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

0

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

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

спасибо.

Смежные вопросы