Ошибка 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. Я попробовал несколько разных способов решения проблемы, и ничего не сработало. Мой код не будет компилироваться. Как это исправить?
Ответы
Ответ 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];
}