Подтвердить что ты не робот

Ошибка Google Api "Несколько методов с именем" initWithArray: "найдено"

Я использую календарь Google api и получаю две ошибки.

  • GTMGatherInputStream.m: 25: 13: Несколько методов с именем 'initWithArray:' found

    #import "GTMGatherInputStream.h"
    @implementation GTMGatherInputStream
    + (NSInputStream *)streamWithArray:(NSArray *)dataArray {
        return [[[self alloc] initWithArray:dataArray] autorelease]; //error on this line
    }
    
  • GTMOAuth2Authentication.h: 31:11: Файл GTMSessionFetcher.h не найден.

    #if GTM_USE_SESSION_FETCHER
    #import "GTMSessionFetcher.h" //GTMSessionFetcher.h file not found error
    #else
    #import "GTMHTTPFetcher.h"
    #endif  // GTM_USE_SESSION_FETCHER
    

Я исследовал ошибку везде в Интернете, и я ничего не нашел. Я запускаю GM El capitan с GM Xcode 7.0. Я попробовал несколько разных способов решения проблемы, и ничего не сработало. Мой код не будет компилироваться. Как это исправить?

4b9b3361

Ответ 1

Я предполагаю, что Google собирается реализовать исправление для этого в ближайшем будущем; в то же время мы можем сделать пару хаков, чтобы обойти эти проблемы:

  • изменить return [[[self alloc] initWithArray:dataArray] autorelease];

    к

    return [[(GTMGatherInputStream*)[self alloc] initWithArray:dataArray] autorelease];

  • изменить

    #ifndef GTM_USE_SESSION_FETCHER
    #define GTM_USE_SESSION_FETCHER 1
    #endif
    

    to

    #ifndef GTM_USE_SESSION_FETCHER
    #define GTM_USE_SESSION_FETCHER 0
    #endif
    

Я должен был сделать это в двух местах, где был определен GTM_USE_SESSION_FETCHER.

Наконец, нужно было перейти к настройкам сборки проекта GTL и установить предупреждения Apple LLVM 7.0 Deprecated Functions на NO. С помощью этих 3 шагов API-интерфейс Calendar успешно компилируется на iOS9.

Ответ 2

Мне также пришлось иметь дело с ошибкой Comparison of address of ... not equal to null pointer is always true

Это вызвало необходимость создания приложения. Нужно было модифицировать строки 340 и 1088 GTMOAuth2ViewControllerTouch.m

например.

  // CGP; 9/30/15; took out "&" before kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly
  //if (accessibility == NULL
  //    && &kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly != NULL) {
  if (accessibility == NULL
        && kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly != NULL) {
    accessibility = kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly;
  }

Ответ 3

Измените self в [[[self alloc] initWithArray:dataArray] autorelease] на GTMGatherInputStream. Это работает для меня:

#import "GTMGatherInputStream.h"
@implementation GTMGatherInputStream
+ (NSInputStream *)streamWithArray:(NSArray *)dataArray {
    return [[[GTMGatherInputStream alloc] initWithArray:dataArray] autorelease];
}