Сбой приложения с исключением: -[NSConcreteMutableData _fastCharacterContents]

Я пытаюсь поделиться данными с facebook. Я могу обмениваться данными, кроме изображений, хранящихся локально в памяти iPhone. Но когда я пытаюсь поделиться изображением, хранящимся локально, с параметром @"source", мое приложение завершается с ошибкой "[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");
         }
     }];

Что может быть причиной этой ошибки?


person ViruMax    schedule 06.02.2014    source источник
comment
Проверьте это, если это может вам помочь code.google.com/p/ touchcode/issues/detail?id=73   -  person iEinstein    schedule 06.02.2014
comment
проверить класс данных NSLog(@"class = %@", [data class]);   -  person Samet DEDE    schedule 06.02.2014
comment
@MatthiasBauch Я использую данные, потому что URL не работает look здесь   -  person ViruMax    schedule 06.02.2014
comment
Класс данных @EPyLEpSY — NSConcreteMutableData.   -  person ViruMax    schedule 06.02.2014
comment
Возможно, вы можете поделиться полной информацией об исключении, а не только именем метода, в котором вы получили исключение. И, если возможно, определите строку, которая вызвала ошибку (иногда точка останова исключения Xcode может быстро сузить это). Но NSConcreteMutableData — это просто внутреннее представление при создании NSMutableData. (NSData – это кластер классов. )   -  person Rob    schedule 06.02.2014
comment
проверьте это.   -  person Samet DEDE    schedule 06.02.2014
comment
Спасибо всем, я получил свой ответ.   -  person ViruMax    schedule 06.02.2014


Ответы (2)


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

Судя по этому ответу, я бы сказал, что вы используете 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"];

который в основном является тем же кодом, что и другой ответ

person Matthias Bauch    schedule 06.02.2014
comment
вы ГЕНИЙ, большое спасибо, что решили мою проблему, но я также попробовал предыдущий способ со строкой в ​​качестве исходного параметра, но он возвращает ответ с неправильным форматом URL. Можете ли вы сказать мне, почему так? - person ViruMax; 06.02.2014
comment
вам нужно посмотреть документацию Facebook, чтобы узнать, какой формат URL-адреса они ожидают. Им может потребоваться URL-адрес поста в Facebook или что-то в этом роде. Как я уже сказал, я никогда не пользовался Social.framework, а угадывать формат параметров мне не по силам ;-) - person Matthias Bauch; 06.02.2014

Пожалуйста, перепроверьте формирование параметров.

и конвертируйте изображение в следующий формат (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
person Mani    schedule 06.02.2014
comment
У вас есть ссылка на документацию, в которой говорится, что вам нужно преобразовать изображение в Base64? - person Matthias Bauch; 06.02.2014