2013-09-19 2 views
1

Просто переключился на XCode 5 и iOS 7 на моем macbook, мысли все будут работать правильно, так как я не делал ничего особенного, но он не работает.Facebook интеграция iOS 7 issue

У меня была интеграция facebook на моем 6.1 приложение, это то, что я делаю:

- (IBAction)facebookTapped:(UIButton *)sender { 

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
     //Check if the net is reachable 
     SLComposeViewController * faceSheet=[self.socialIntegration showFacebook:@"text" andImage:nil andLink:@"link" andView:self]; 
     dispatch_sync(dispatch_get_main_queue(), ^{ 
      //[self netConnectionTrue:cell Connected:answer]; 
      //[tempAlertView show]; 
      [self presentViewController:faceSheet animated:YES completion:NO]; 

     }); 
    }); 


} 

теперь, когда я нажимаю кнопку, это то, что я получаю:

+ [SocailIntegration modalTransitionStyle] : непризнанные селектор послал к классу 0x49b30

и приложение изломы на этой линии: [self presentViewController:faceSheet animated:YES completion:NO];

Кто-нибудь знает, почему это может случиться?

EDIT: Это мой код в классе социальной интеграции:

-(SLComposeViewController *) showFacebook:(NSString *) initialText andImage:(NSString *) imageName andLink:(NSString *) link andView:(UIViewController *) controller { 

    if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) 
    { 
     SLComposeViewController *faceSheet = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook]; 
     [faceSheet setInitialText:initialText]; 
     if (imageName.length!=0) 
     { 
      [faceSheet addImage:[UIImage imageNamed:imageName]]; 
     } 
     if (link.length!=0) 
     { 
      [faceSheet addURL:[NSURL URLWithString:link]]; 
     } 
     return faceSheet; 
     //[controller presentViewController:faceSheet animated:YES completion:nil]; 


    } 
    else 
    { 
     UIAlertView *alertView = [[UIAlertView alloc] 
            initWithTitle:@"Sorry" 
            message:@"You can't send a status right now, make sure your device has an internet connection and you have at least one Facebook account setup" 
            delegate:nil 
            cancelButtonTitle:@"OK" 
            otherButtonTitles:nil]; 
     [alertView show]; 
    } 

} 
+0

Что такое 'self.socialIntegration' - вам не нравится, что вы звоните в iOS API, поэтому я предполагаю, что это то, что вы либо собрали самостоятельно, либо часть сторонней части кода? – lxt

+0

@lxt его класс, который я использую для сбора twitter и facebook вместе, я добавил код, который используется в socialIntegration. –

ответ

3

Ваш пользовательский класса socialIntegration есть ошибка в нем. Он возвращает только SLComposeViewController, если на устройстве доступно Facebook. Если это не так, он ничего не возвращает.

Однако, вы не проверить это, когда вы на самом деле назвать это:

SLComposeViewController * faceSheet=[self.socialIntegration showFacebook:@"text" andImage:nil andLink:@"link" andView:self]; 
     dispatch_sync(dispatch_get_main_queue(), ^{ 
      //[self netConnectionTrue:cell Connected:answer]; 
      //[tempAlertView show]; 
      [self presentViewController:faceSheet animated:YES completion:NO]; 

     }); 

... вы не проверять, если faceSheet равна нулю. Поэтому, если нет учетной записи Facebook, вы вызываете presentViewController с нулевым объектом, который вызывает ошибку, которую вы видите.

Причина, по которой вы видите это на iOS 7, связана с вашими связанными учетными записями FB, но, вероятно, это был источник сбоев для ваших пользователей на iOS 6.

+1

+1 Отличный ответ. – Caleb

+0

Спасибо вам большое! Однако в iOS 6, когда учетная запись не была связана, она создала окно системного предупреждения, помогающее пользователю подключить учетную запись, почему это не происходит в iOS 7? –

+0

iOS 6 может быть более прощающим при передаче 'nil'' presentViewController' ... Я не уверен. Ваш код просмотра предупреждений выглядит хорошо для меня. – lxt

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