Приложение вылетает на ios 4.X для фреймворка Twitter.framework - PullRequest
2 голосов
/ 27 декабря 2011

Я использую Twitter с помощью Sharekit, а для IOS5 я использую его класс TWTweetComposeViewControllerClass as,

Class TWTweetComposeViewControllerClass = NSClassFromString(@"TWTweetComposeViewController");

    if (TWTweetComposeViewControllerClass != nil) {
        if([TWTweetComposeViewControllerClass respondsToSelector:@selector(canSendTweet)]) {
            UIViewController *twitterViewController = [[TWTweetComposeViewControllerClass alloc] init];

            [twitterViewController performSelector:@selector(setInitialText:) 
                                        withObject:NSLocalizedString(@"TwitterMessage", @"")];



            [self.navigationController presentModalViewController:twitterViewController animated:YES];
            [twitterViewController release];
        }
    } else {
        [SHK flushOfflineQueue];
        SHKItem *item = [SHKItem text:text];
        //[SHKTwitter shareItem:item];
        SHKActionSheet *actionsheet = [SHKActionSheet actionSheetForItem:item];
        [actionsheet showFromToolbar:self.navigationController.toolbar];
    }

Работает нормально с симулятором 5.0, но вылетает на 4.3 с ошибкой ниже.

dyld: Library not loaded: /System/Library/Frameworks/Twitter.framework/Twitter
      Referenced from: /Users/indianic/Library/Application Support/iPhone Simulator/4.3.2/Applications/241167D0-62E0-4475-85FD-0B8253B4E456/demoFBTW.app/demoFBTW
      Reason: image not found

Как мне это исправить. Я попытался изменить зависимость для фреймворка с Обязательный на Необязательный , но не нашел для этого

1 Ответ

3 голосов
/ 27 декабря 2011

Похоже, вы нашли, как слабое звено фреймворка. Предполагая, что вы используете Xcode 4.2 и LLVM3, вы также можете немного упростить этот код и исправить ошибку, возникшую у вас во время работы:

#include <Twitter/Twitter.h>

// This line is no longer needed:
// Class TWTweetComposeViewControllerClass = NSClassFromString(@"TWTweetComposeViewController");


// this part can now be:
if ([TWTweetComposeViewController class] != nil) { // no need to look up class by string now

    // note previously you were checking if this class responds to 'canSendTweet'
    // but you never called the method to see if you can actually send the tweet

    if([TWTweetComposeViewController canSendTweet]) {

        // you can type this correctly now...
        TWTweetComposeViewController *twitterViewController = [[TWTweetComposeViewController alloc] init];

        // ... and call this method directly
        [twitterViewController setInitialText:NSLocalizedString(@"TwitterMessage", @"")]; 

        [self presentModalViewController:twitterViewController animated:YES];

        [twitterViewController release];
    }
}
... continue with the shareKit option
...