#ios #swift #onesignal #couchbase-lite
#iOS #swift #onesignal #couchbase-lite
Вопрос:
Я получаю ошибку компиляции Xcode:
<unknown>:0: error: reference to 'Session' is ambiguous
/ProjectDirectory/Pods/OneSignal/iOS_SDK/OneSignalSDK/Framework/OneSignal.framework/Headers/OneSignal.h:244:29: note: candidate found by name lookup is 'Session'
typedef NS_ENUM(NSUInteger, Session) {
^
/Users/MyUserName/Library/Developer/Xcode/DerivedData/AppName-apoiuurqrcguucdjqrtzfoqixrcx/Build/Products/Debug-iphoneos/UserData.framework/Headers/UserData-Swift.h:245:12: note: candidate found by name lookup is 'Session'
@interface Session : CBLModel
Похоже, Xcode выдал эту ошибку, потому что project имеет класс, Session
который наследует CBLModel
(CouchBase document), а project использует OneSignal framework.
Если сеанс объекта не наследуется CBLModel
, Xcode компилируется без серьезных проблем.
Кажется, что из-за CouchBase Xcode каким-то образом генерирует дополнительные файлы?
Xcode предоставляет Candidate found by name lookup is 'Session'
:
SWIFT_CLASS("_TtC8UserData7Session")
@interface Session : CBLModel
@property (nonatomic) int64_t created;
@end
И
/* OneSignal Influence Types */
typedef NS_ENUM(NSUInteger, Session) {
DIRECT,
INDIRECT,
UNATTRIBUTED,
DISABLED
};
Есть идеи, как решить проблему без переименования Session
?
Комментарии:
1. Я сомневаюсь, что это возможно, и именно поэтому настоятельно рекомендуется всегда добавлять префиксы к типам Objective-C, поскольку в нем нет понятия пространства имен и тому подобного, Особенно с таким вездесущим именем, как
Session
2. @Xernox вы пробовали переименовать объект сеанса?
3. @Jay Да, я переименовал свой сеанс. Это казалось единственным исправлением
4.
UserData.framework/Headers/UserData-Swift.h
иOneSignal.framework/Headers/OneSignal.h
оба не похожи на классы фреймворка CBL. Вы уверены, что изменение наследования только от CBLModel исправляет ошибку неоднозначного имени класса?5. Я переименовал свой собственный сеанс, который унаследовал документ CBL. Как только мой объект наследует CBL — вот и все, его нельзя назвать сеансом.