ObjectiveFlickr Ошибка загрузки фотографий - PullRequest
3 голосов
/ 14 марта 2012

Я работаю над использованием библиотеки ObjectiveFlickr для загрузки фотографий на Flickr из моего приложения для iPhone. Я могу авторизовать приложение и выполнить общие запросы, но я получаю сообщение об ошибке при попытке загрузить фотографию. Фотография предназначена для загрузки - это изображение, снятое с помощью AVFoundation. Вот соответствующий код:

UIImage *image = [[UIImage alloc] initWithData:imageData];
if ([[AppDelegate sharedDelegate].apiContext.OAuthToken length]) {
                    NSData *uploadData = UIImageJPEGRepresentation(image, 1);

                   if (!flickrRequest) {
                        flickrRequest = [[OFFlickrAPIRequest alloc] initWithAPIContext:[AppDelegate sharedDelegate].apiContext];
                        flickrRequest.delegate = self;
                        flickrRequest.requestTimeoutInterval = 60.0;
                    }

                    [flickrRequest uploadImageStream:[NSInputStream inputStreamWithData:uploadData] suggestedFilename:@"Test" MIMEType:@"image/jpeg" arguments:[NSDictionary dictionaryWithObjectsAndKeys:@"0", @"is_public", nil]];
                    [UIApplication sharedApplication].idleTimerDisabled = YES;

                    NSLog(@"Can upload photo");

Объект flickrRequest определен и @property 'd в файле .h, относящемся к приведенному выше коду.

Методы OFFlickrRequestDelegate следующие:

- (void)flickrAPIRequest:(OFFlickrAPIRequest *)inRequest imageUploadSentBytes:(NSUInteger)inSentBytes totalBytes:(NSUInteger)inTotalBytes {
    NSLog(@"Success");
}

- (void)flickrAPIRequest:(OFFlickrAPIRequest *)inRequest didCompleteWithResponse:(NSDictionary *)inResponseDictionary {
    NSLog(@"%s %@ %@", __PRETTY_FUNCTION__, inRequest.sessionInfo, inResponseDictionary);
}

- (void)flickrAPIRequest:(OFFlickrAPIRequest *)inRequest didFailWithError:(NSError *)inError {
    NSLog(@"%s %@ %@", __PRETTY_FUNCTION__, inRequest.sessionInfo, inError);
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:[inError description] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
    [alert show];
}

Когда я запускаю проект на устройстве, консоль показывает:

Can upload photo
Success
Success
Success
Success
flickrAPIRequest:didFailWithError:(null) Error Domain=org.lukhnos.ObjectiveFlickr Code=2147418115 "The operation couldn’t be completed. (org.lukhnos.ObjectiveFlickr error 2147418115.)"

При поиске в документации API "error 2147418115" определяется как "OFFlickrAPIRequestFaultyXMLResponseError". Я не совсем уверен, что это значит, хотя. Также странно - «Успех» появляется четыре раза, когда я пытаюсь загрузить только одну фотографию.

Пример приложения, использующего ObjectiveFlickr «Snap and Run», прекрасно загружает фотографии на том же устройстве, на котором я тестирую. Сравнивая код между моим приложением и Snap and Run, я не вижу серьезных отличий, которые могли бы привести к тому, что фотография не загружалась.

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 20 января 2013

Когда я получил эту ошибку, я использовал Чарльз , чтобы увидеть, что происходит.Flickr отправлял сообщение об ошибке, в котором говорилось, что подпись недействительна.Глядя на мой запрос, я обнаружил, что изменил порядок ключей и значений (т. Е. В одном из моих ключей был пробел, что, вероятно, вызвало ошибку подписи).

1 голос
/ 25 апреля 2012

Это странно. OFFlickrAPIRequestFaultyXMLResponseError означает, что возвращаемые данные не могут быть проанализированы как XML. Если пример приложения SnapAndRun работает правильно, а ваше - нет, я предлагаю добавить одну строку в ObjectiveFlickr.m сразу после строки NSString *stat = [rsp objectForKey:@"stat"];:

NSString *dataString = [[[NSString alloc] initWithData:[request receivedData] encoding:NSUTF8StringEncoding] autorelease];
NSLog(@"received response: %@", dataString);

Это может помочь вам выяснить, что идет не так (например, если это проблема на стороне сервера или какой-то формат ответа, пропущенный библиотекой).

...