AndrewShmig / Vkontakte-iOS-SDK-LV

[iOS] Powerful & flexible Vkontakte iOS SDK Latest Version
79 stars 23 forks source link

Post image to user wall - parser error #85

Closed AlexDag closed 10 years ago

AlexDag commented 10 years ago

Помогите пожалуйста с постом рисунка на стену - на втором этапе,на самом посте получаю следующее: parsing error: Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Garbage at end.) UserInfo=0x22641760 {NSDebugDescription=Garbage at end.} (lldb)

 Рисунок не большой- 5к

if([request.signature isEqualToString:kPHOTO_URL_UPLOAD]){
    NSString *uploadURL = response[@"response"][@"upload_url"];
    VKRequest *photoUpload = [VKRequest requestHTTPMethod:@"POST"
                                                     URL:[NSURL URLWithString:uploadURL]
                                                  headers:@{}
                                                    body:nil
                                                delegate:self];
    photoUpload.signature = kPHOTO_WILL_UPLOAD;
    UIImage *im = [UIImage imageNamed:@"IconSmall-50.png"];
    [photoUpload appendImageFile:UIImageJPEGRepresentation(im, 1.0)
                           name:@"photo"
                          field:@"photo"];

[photoUpload start];
AndrewShmig commented 10 years ago

@AlexDag а, если использовать [NSData dataWithContentsOfFile:__] вместо UIImageJPEGRepresentation(im, 1.0) работает?

AlexDag commented 10 years ago

то же сообщение:

    VKRequest *photoUpload = [VKRequest requestHTTPMethod:@"POST"
                                                     URL:[NSURL URLWithString:uploadURL]
                                                  headers:@{}
                                                    body:nil
                                                delegate:self];
    photoUpload.signature = kPHOTO_WILL_UPLOAD;
    NSString *filePath = [[NSBundle mainBundle]
                          pathForResource:@"IconSmall-50"
                          ofType:@"png"];
                                   NSData* imageData = [NSData dataWithContentsOfFile:filePath];

    if(nil!=imageData)
        NSLog(@"not nill");
            [photoUpload appendImageFile:imageData
                            name:@"photo.png"
                           field:@"photo"];

    /*
    UIImage *im = [UIImage imageNamed:@"IconSmall-50.png"];

    [photoUpload appendImageFile:UIImagePNGRepresentation(im)
                           name:@"photo.png"
                          field:@"photo"];
*/
[photoUpload start];
AndrewShmig commented 10 years ago

@AlexDag судя по коду ошибки и тому, что выдаёт дакдакгоу ( https://duckduckgo.com/?q=Cocoa%20error%203840 ), проблема не здесь, а в структуре самого ответа сервера. До обработки ответа сервера попробуйте выводить его промежуточные ответы JSON. Я раньше с таким сталкивался, только вот не помню, какое решение было.

AlexDag commented 10 years ago

ok , вижу что _receivedData на втором этапе имеет данные первого запроса - photosGetWallUploadServer data = <7b227265 73706f6e 7365223a 7b227570 6c6f6164 5f75726c 223a2268 7474703a 5c2f5c2f 63733630 37313237 2e766b2e 636f6d5c 2f75706c 6f61642e 7068703f 6163743d 646f5f61 6464266d 69643d32 33393435 39343730 26616964 3d2d3134 26676964 3d302668 6173683d 39343333 30393735 63636665 61393735 64663738 64643730 64333762 32303262 26726861 73683d30 35643331 30643633 30636231 38363137 62386563 64663161 38363866 30333826 73776675 706c6f61 643d3126 6170693d 31267761 6c6c7068 6f746f3d 31222c22 61696422 3a2d3134 2c226d69 64223a32 33393435 39343730 7d7d>;

data = <7b227265 73706f6e 7365223a 7b227570 6c6f6164 5f75726c 223a2268 7474703a 5c2f5c2f 63733630 37313237 2e766b2e 636f6d5c 2f75706c 6f61642e 7068703f 6163743d 646f5f61 6464266d 69643d32 33393435 39343730 26616964 3d2d3134 26676964 3d302668 6173683d 39343333 30393735 63636665 61393735 64663738 64643730 64333762 32303262 26726861 73683d30 35643331 30643633 30636231 38363137 62386563 64663161 38363866 30333826 73776675 706c6f61 643d3126 6170693d 31267761 6c6c7068 6f746f3d 31222c22 61696422 3a2d3134 2c226d69 64223a32 33393435 39343730 7d7d7b22 72657370 6f6e7365 223a7b22 75706c6f 61645f75 726c223a 22687474 703a5c2f 5c2f6373 36303731 32372e76 6b2e636f 6d5c2f75 706c6f61 642e7068 703f6163 743d646f 5f616464 266d6964 3d323339 34353934 37302661 69643d2d 31342667 69643d30 26686173 683d3934 33333039 37356363 66656139 37356466 37386464 37306433 37623230 32622672 68617368 3d303564 33313064 36333063 62313836 31376238 65636466 31613836 38663033 38267377 6675706c 6f61643d 31266170 693d3126 77616c6c 70686f74 6f3d3122 2c226169 64223a2d 31342c22 6d696422 3a323339 34353934 37307d7d>;

я его обнулил перед вторым постом([vkrequest cancel]) - парсер пропустил, без обнуления - ругался.

AlexDag commented 10 years ago

не так - cancel не помог, сделал это в SDK - empty receiver :

AndrewShmig commented 10 years ago

@AlexDag а вы по шагам делаете?

я его обнулил перед вторым постом([vkrequest cancel]) Что обнулили? Зачем отменять запрос?

Мне бы всё-таки на весь код взглянуть, отрывками сложно. Ищите ошибку на каждом этапе: смотрите, что сервер возвращает, какие JSON данные, вызывается ли второй шаг, вызывается ли третий шаг и тд.

Попробуйте полностью взять пример из документации и отправить изображение. Если всё нормально - сверяйте, если и пример из документации выдаст такую ошибку, то я посмотрю, что происходит, но это будет не быстро.

AlexDag commented 10 years ago

я понимаю что достал уже, я начал с Вашего примера и ..... "**ViewController.m:70:29: No visible @interface for 'VKUser' declares the selector 'photosSave:'" VKRequest *firstStep = [[VKUser currentUser] photosGetUploadServer:@{ @"album_id" : @(167233642) }]; и не знаю как VKUser идет на VKRequest ........ дальше - то же самое это пример: https://github.com/AndrewShmig/Vkontakte-iOS-SDK-LV/issues/22

AndrewShmig commented 10 years ago

@AlexDag не достали :) прекратите!)

Посмотрите эту ссылку: http://andrewshmig.github.io/Vkontakte-iOS-SDK-LV/ Раздел "How to upload files?"

AlexDag commented 10 years ago

Вы меня извините, наверное я все же что то не понимаю- здесь в разделе "How to upload files?", по ссылке, то же самое: VKRequest *thirdStep = [[VKUser currentUser]audioSave - не компилируется.......

    if([request.signature isEqualToString:@"secondStep"]){
        VKRequest *thirdStep = [[VKUser currentUser]
                                        audioSave:@{
                                                @"server": response[@"server"],
                                                @"hash": response[@"hash"],
                                                @"audio": response[@"audio"]
                                        }];

        thirdStep.signature = @"thirdStep";
        thirdStep.delegate = self;

        thirdStep.cacheLiveTime = VKCachedDataLiveTimeNever;

        [thirdStep start];
    }
AndrewShmig commented 10 years ago

@AlexDag не компилируется?! Или всё-таки выдаёт ошибку, которая была вначале?

Всё-таки хотелось бы увидеть молный код отправки фотографии на сервер, а еще лучше вместе с логами включенными.