2011-12-23 6 views
0

내가 지금 데 문제가 내가이 메서드를 호출하고있어호출 뷰 컨트롤러 문자열이

입니다 : - (무효) imagePickerController : (UIImagePickerController를 *) 선택 도구 didFinishPickingMediaWithInfo : (NSDictionary와 *) 정보 VC1

에서

나는 VC1에서 문자열 1을 가지고 있지만 그 이미지의 대리자 메서드가 다른 클래스에서 호출되기 때문에 그 방법

내에서 호출 할 수 없습니다 .

내가 NSLog (@ "% @", string1); null만을 나타냅니다

이미지 대리자 메서드 내부에서 string1을 검색하려고합니다.

누구든지 어떻게하는지 압니까? 감사합니다.

NSString *string1; 

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
    viewcontroller *v = [[viewcontroller alloc]init]; 
    NSLog(@"string1 %@", v.string1); 
} 

EXC_BAD_ACCESS

을 콘솔에서 : I 선언

- (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; 

}

의 ViewController에서

: 여기

소스의 string1 (null)

콘솔에서 helloworld 문자열을보고 싶습니다. imagePickerController 대리자 메서드 내에서 pictureName 문자열을 호출 할 수 없습니다. 대신 NSStringNSString*을 필요로 %@

+0

self.string1을 사용해 보셨나요? 그리고 디버그하여 자기 부분을 열면 Helloworld라는 문자열을 볼 수 있습니까? – CyberK

+0

왜냐하면 delegate 메소드가 다른 클래스에서 호출 되었기 때문에 exec1이 string1에서 exec 액세스를 잘못했기 때문입니다. diff1 클래스에서 string1을 호출하는 방법을 알아야합니다. –

+0

내 게시물을 어떻게 삭제합니까? 제가 실수를. –

답변

0

NSLog(@"string1 %@", *string1); 잘못된
NSLog(@"string1 %@", string1); 올바른

형식. string1NSString*입니다.


업데이트 : 나는 당신이 부품을 교체 것으로 나타났습니다 : 정확하지입니다

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

. string1viewDidLoad으로 초기화되지만로드 된 적이없는 string1v입니다. 그리고 나는 당신이 새로운 vc 객체를 생성해야한다고 생각하지 않는다. 상수 문자열이 필요하면 @"Helloworld"을 사용하십시오. 현재 개체의 문자열을 원하면 새 개체를 만드는 대신 self.string1을 사용해야합니다. Objective-C에는 static variable이 없음을 유의하십시오.

은의이를 해보자 :

  1. 당신이에 NSString * string1; 쓰기 있는지 확인하십시오.vc의 h 파일;
  2. NSLog(@"string1 %@",self.string1);
+0

반드시 맞습니다. 그러나 여러분에게 알려 드리기 위해, 질문은 이미 바뀌 었습니다. 나는 단지 이것을 게시하고 있으므로 아무도 당신에게 -1을주지 않습니다. 왜냐하면 당신의 대답은 수정 된 질문에 의미가 없기 때문입니다. –

+0

감사합니다. 이전 답변을 입력하는 중에 질문이 변경되었습니다. 얼마나 당황 스럽습니까? – Skyler

+0

답변이 업데이트되었습니다. – Skyler

0

viewDidLoad 만 (이름에서 알 수 있듯이)의 뷰가로드 된 후에 호출과 본체에게 위임 방법을 대체 string1 = [[NSString alloc] initWithFormat:@"%@",@"Helloworld"];

  • 으로 string1 = @"Helloworld";
    대체. 어떻게 든 viewController를 제시하면 이런 일이 발생합니다. 예 : 그것을 UINavigationController에 푸시하거나 UITabBarController에 추가하거나 모달로 제시하십시오.

    당신이 당신의 ViewController 전에 문자열 1을 사용하려면

    당신이


    Btw는 두 번째의 ViewController 초기화 init 또는 initWithNibName:bundle: 또는 당신이 사용하는 어떤로 string1 = @"Helloworld";를 넣어해야 해당 뷰를로드, 당신은 시작 부분에 [super viewDidLoad]를 잊어 버렸습니다 귀하의 viewDidLoad 메서드입니다.
    클래스 이름이 잘못되었으므로 대문자로 시작해야합니다.

  • 0

    [보유 문자열 1];

    viewcontroller * v = [[viewcontroller alloc] init]이 필요하지 않습니다.

    감사합니다.