2014-02-06 2 views
1

Я пытаюсь обмениваться данными с facebook. Я могу обмениваться данными, кроме изображений, хранящихся локально в памяти iPhone. Но когда я пытаюсь обмениваться изображениями, хранящимися локально с параметром @ "source", мое приложение заканчивается ошибкой "[NSConcreteMutableData _fastCharacterContents]".Сбой приложения с исключением: - [NSConcreteMutableData _fastCharacterContents]

Для совместного использования локального изображения я конвертирую его в NSData, как требуется параметром @ "source".

NSData *data = [NSData dataWithContentsOfURL:localUrl]; 

    __block ACAccount *facebookAccount = nil; 

    ACAccountType *facebookAccountType = [self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook]; 

    // Specify App ID and permissions 
    NSDictionary *options = @{ 
           ACFacebookAppIdKey: @"xxxxxxxxxxxxxx", 

           ACFacebookPermissionsKey: @[@"email"], 
           ACFacebookAudienceKey: ACFacebookAudienceEveryone 
           }; // basic read permissions 

    [self.accountStore requestAccessToAccountsWithType:facebookAccountType 
              options:options completion:^(BOOL granted, NSError *e) 
    { 
     if (granted) { 
      // Now that you have publish permissions execute the request 
      NSDictionary *options2 = @{ 
             ACFacebookAppIdKey: @"xxxxxxxxxxxxxx", 
             ACFacebookPermissionsKey: @[@"publish_stream", @"publish_actions"], 
             ACFacebookAudienceKey: ACFacebookAudienceFriends 
             }; 
      [self.accountStore requestAccessToAccountsWithType:facebookAccountType options:options2 completion:^(BOOL granted, NSError *error) { 
       if (granted) { 
        NSArray *accounts = [self.accountStore accountsWithAccountType:facebookAccountType]; 

        facebookAccount = [accounts lastObject]; 

        /*NSDictionary *parameters = @{@"message": @"This is a test", 
                @"name": @"Sharing Tutorial", 
                @"caption": @"Build great social apps and get more installs.", 
                @"description": @"Allow your users to share stories on Facebook from your app using the iOS SDK.", 
                @"link": @"https://developers.facebook.com/docs/ios/share/", 
                @"source":data};*/ 
        NSMutableDictionary *parameters = [NSMutableDictionary dictionaryWithObjectsAndKeys: 
                @"My hat image", @"message", data, @"source", nil]; 

        NSURL *feedURL = [NSURL URLWithString:@"https://graph.facebook.com/me/photos"]; 

        SLRequest *feedRequest = [SLRequest 
               requestForServiceType:SLServiceTypeFacebook 
               requestMethod:SLRequestMethodPOST 
               URL:feedURL 
               parameters:parameters]; 
        NSLog(@"AnythingHere?"); 

        [feedRequest setAccount:facebookAccount]; 

        [feedRequest performRequestWithHandler:^(NSData *responseData, 
                   NSHTTPURLResponse *urlResponse, NSError *error) 
         { 
          // Handle response 
          NSLog(@"%@%@", error,urlResponse); 

          NSDictionary *response = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:nil]; 

          NSLog(@"Facebook Response : %@",response); 

         }]; 



       } 
       else { 
        NSLog(@"Access denied 2"); 
        NSLog(@"%@", [error description]); 
       } 
      }]; 
     } else { 
      NSLog(@"Error: %@", [e description]); 
      NSLog(@"Access denied"); 
     } 
    }]; 

В чем причина этой ошибки?

+0

Пожалуйста, проверьте это, если это может помочь вам http://code.google.com/p/touchcode/issues/detail?id=73 – iEinstein

+0

проверки Дейты class 'NSLog (@" class =% @ ", [data class]);' –

+0

@MatthiasBauch Я использую данные, потому что url не работает [смотрите здесь] (http://stackoverflow.com/questions/14748140/share- image-from-bundle-and-link-on-facebook-in-iphone) – ViruMax

ответ

1

Это просто догадка, потому что я никогда не использовал социальные рамки, но это слишком долго для комментария.

Судя по этому answer Я бы сказал, что вы используете SLRequest неправильно. Я уверен, что исключение исходит от вашего объекта данных, который интерпретируется как NSString (или NSURL).
Возможно, вы должны использовать addMultipartData:withName:type:filename:, чтобы прикрепить фотографию к запросу.

NSMutableDictionary *parameters = [NSMutableDictionary dictionaryWithObjectsAndKeys: 
             @"My hat image", @"message", nil]; 

NSURL *feedURL = [NSURL URLWithString:@"https://graph.facebook.com/me/photos"]; 

SLRequest *feedRequest = [SLRequest 
       requestForServiceType:SLServiceTypeFacebook 
       requestMethod:SLRequestMethodPOST 
       URL:feedURL 
       parameters:parameters]; 

[feedRequest addMultipartData:data 
        withName:@"source" 
         type:@"multipart/form-data" 
        filename:@"Test Image"]; 

который в основном тот же код, как another answer

+0

вы GENIUS, большое спасибо, что решили мою проблему, но я также пробовал предыдущий путь со строкой как параметр «source», но он возвращает ответ «неправильный формат URL». Можете ли вы сказать мне, почему так? – ViruMax

+0

вам нужно посмотреть документацию Facebook, чтобы узнать, какой формат URL-адреса они ожидают. Им может потребоваться URL-адрес сообщения в facebook или что-то в этом роде. Как я уже сказал, я никогда не использовал Social.framework, и угадывание формата параметров было выше моих навыков ;-) –

0

перепроверить настройку параметров.

и конвертировать изображения в следующих формиат (Base64)

NSData *rep = UIImagePNGRepresentation(img); 
NSLog(@"Rep: %@", rep); 
NSString *base64 = [rep encodeBase64]; 
NSLog(@"Base 64 is a %@", NSStringFromClass([base64 class])); 
self.somestring = [@"hardcodedstring" stringByAppendingString:base64]; //encodeBase64 encodes it to base64 
+0

У вас есть ссылка на документацию, в которой говорится, что вам нужно преобразовать изображение в Base64? –

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

  • Нет связанных вопросов^_^