выборка GDataFeedPhotoAlbum возвращает неправильный тип объекта - PullRequest
0 голосов
/ 25 февраля 2012

Я пытаюсь реализовать выборку веб-альбома picasa на iphone, загрузил код и пример с google.code, но столкнулся с проблемой, когда при получении фида альбома возвращается канал с неправильными типами объектов - GDataEntryBase вместо GDataEntryPhoto .

Вот код, который я использую:

Сначала я звоню, чтобы получить все мои альбомы:

- (void)fetchAllAlbums 
{
    NSLog(@"Fetching all albums");

    //request albums
    GDataServiceTicket *ticket;    
    NSURL *feedURL = [GDataServiceGooglePhotos photoFeedURLForUserID:myemail
                                                             albumID:nil
                                                           albumName:nil
                                                             photoID:nil
                                                                kind:nil
                                                              access:nil];
    ticket = [_GooglePhotoService fetchFeedWithURL:feedURL
                                          delegate:self
                                 didFinishSelector:@selector(albumListFetchTicket:finishedWithFeed:error:)];
    [self set_AlbumFetchTicket: ticket];
}

Теперь в обратном вызове я звоню, чтобы получить все фотографии каждого возвращенного альбома:

- (void)albumListFetchTicket:(GDataServiceTicket *)ticket
            finishedWithFeed:(GDataFeedPhotoUser *)feed
                       error:(NSError *)error 
{
    [self set_UserAlbumFeed: feed];
    [self set_AlbumFetchError:error];
    [self set_AlbumFetchTicket:nil];

    if (error == nil) {
        NSLog(@"Got albums!");

        for (GDataEntryPhotoAlbum * albumEntry in _UserAlbumFeed)
        {
            NSLog(@"Album Title: %@", [[albumEntry title] stringValue]);
            {
                NSLog(@"Fetching photos!");

                [self set_AlbumPhotosFeed:nil];
                [self set_PhotosFetchError:nil];
                [self set_PhotosFetchTicket:nil];

                GDataServiceTicket *ticket;
                ticket = [_GooglePhotoService fetchFeedWithURL: [[albumEntry feedLink] URL]
                                                      delegate: self
                                             didFinishSelector: @selector(photosTicket:finishedWithFeed:error:)];

                [self set_PhotosFetchTicket:ticket];

            }
        }
    }
}

, и это обратный вызов для каждой загрузки фотографий из альбома:

// photo list fetch callback
- (void)photosTicket:(GDataServiceTicket *)ticket
    finishedWithFeed:(GDataFeedPhotoAlbum *)feed
               error:(NSError *)error 
{
    //tell me what class you are
    NSLog(@"Feed class: %@", NSStringFromClass([feed class]));

    [self set_AlbumPhotosFeed:   feed];
    [self set_PhotosFetchError:  error];
    [self set_PhotosFetchTicket: ticket];

    if (error == nil)
    {
        NSLog(@"Got Photos!");

        for (GDataEntryPhoto * photo in feed)
        {
            NSLog(@"Title: %@", [[photo title] stringValue]);

            //tell me what class you are
            NSLog(@"%@", NSStringFromClass([photo class]));

            //NSArray * thumbnails = [[photo mediaGroup] mediaThumbnails];
            //NSLog(@"thumbnails count: %d", [thumbnails count]);
            //NSLog(@"Photo thumnail url: %@", [[thumbnails objectAtIndex:0] URLString]);
        }            
    }
}

Проблема в том, что записи в фиде в последнем обратном вызове не относятся к типу GDataEntryPhoto, а просто к базовому GDataEntryBase - поэтому попытка получить доступ к их URL-адресам миниатюр приведет к сбою приложения.Код скопирован из примера Google без какао, и он работает - возвращаемый канал заполняется объектами GDateEntryPhoto.

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

1 Ответ

1 голос
/ 06 июля 2012

Добавьте -ObjC -all_load в Другие флаги компоновщика в вашем xcodeproject, затем добавьте SystemConfiguration.framework, CFNetwork.framework и Security.framework в Фазы сборки -> Библиотека ссылок С двоичными файлами .

...