2011-11-28 5 views
3

다음 코드를 구현하여 Twitter 공유를 수행했습니다. 제 코드에서 iOS 5를 테스트하려고합니다. 작동하지 않는다면 ShareKit의 Twitter 코드를 사용하여 이전 공유 방법으로 되돌아갑니다. iOS에서 TWTweetComposeViewController 코드를 개선하려면 어떻게해야합니까?

나는 공동 작업자에 코드를 보여주고 그 사람이 내 코드가 결함이있을 수 있습니다 제안 내가이 일을 할 필요가 :

  1. 적절한 실행 시간 체크를 수행했다 ?? (IOS 4 및 이전 버전에서는 충돌이 발생할 수 있기 때문에).
  2. 약한 링크 트위터 프레임 워크

누군가가 친절하게 적절한 런타임 검사가 어떻게 될지 설명 할 수 있습니까? 왜 약한 링크인가?

NSString *text = [NSString stringWithFormat:@"@Awesome chart: %@", self.titleLabel.text]; 

if ([TWTweetComposeViewController canSendTweet]) 
{ 

    TWTweetComposeViewController *tweetComposeViewController = [[TWTweetComposeViewController alloc] init]; 
    [tweetComposeViewController setInitialText:text]; 
    [tweetComposeViewController addImage:image]; 
    [tweetComposeViewController setCompletionHandler:^(TWTweetComposeViewControllerResult result){ 

     dispatch_async(dispatch_get_main_queue(), ^{ 
      [self dismissModalViewControllerAnimated:YES]; 
      if (result == TWTweetComposeViewControllerResultDone) 
      { 
       NSLog(@"iOS 5 onwards Twitter share complete"); 
      } 
     }); 
    }]; 

    [self presentViewController:tweetComposeViewController 
         animated:YES 
        completion:^{ }]; 
} 
else 
{ 
    SHKItem *item = [SHKItem image:image title:text]; 

    // Share the message. 
    [SHKTwitter shareItem:item]; 
    NSLog(@"Device does not support Twitter library"); 
    } 
} 

답변

4

약한 링크는 단순히 틀 장치에있을 필요는 없다 의미한다. 다시 말하면, 프로젝트에 프레임 워크를 추가 할 때 응용 프로그램은 해당 프레임 워크가 장치에 있어야합니다. 따라서 프레임 워크가 있어야하고 그렇지 않은 경우 앱이 다운됩니다. 귀하의 경우, iOS 5 이전의 iOS 버전 (예 : iOS 4.x)에서 앱을 실행하려면 트위터 프레임 워크를 약하게 연결하고 싶을 것입니다.

적절한 실행 시간 체크는 (iOS 5 이상을 실행하는) 장치에 응용 프로그램을로드하고 앱 트위터 기능을 테스트해야합니다 의미합니다. 충돌이 발생하면 문제가 있다는 것을 알게됩니다.

나는 코드를 훑어보고 모든 것이 잘 보입니다. 그래도 문법 오류 등을 말할 수는 없지만 작성자를 통해 실행하지 않았습니다. 내가 만드는 것이 하나의 변화는 다음과 같습니다

if ([TWTweetComposeViewController canSendTweet])

Class twClass = NSClassFromString(@"TWTweetComposeViewController"); 
if (!twClass) // Framework not available, older iOS 
    return; 

나는 그 말 그대로 확인 becuase 프레임 워크가 해당 장치에있는 경우 즉 사용하는 이유

에, canSendTweet 검사 사용자의 경우 동안 에 기록됩니다. 내가 그 장치 아이폰 OS (5)와 트위터를 지원하지 않습니다

당신이 도움이 더 이상 필요 알려줘 사용자로 로그인되지 않은 사용자를 혼동하지 않도록.

0

나는 (내가 본 코드 샘플의 대부분을로) 당신은 또한 컨트롤러를 누설 생각합니다. 한편

, 당신은 완료 핸들러에 대한 문서에 주목, 제대로 메인 스레드에서 UI 작업을 수행해야합니다. 동일한 작업을 수행하기 위해 구현을 수정해야합니다.

관련 문제