Xcode 8では、Objective-Cがわずかに変更されました。クラスレベルのプロパティがあります。 NSBundleXcode 8、クラスレベルのプロパティを無効にする
@interface NSBundle : NSObject {
...
/* Methods for creating or retrieving bundle instances. */
#if FOUNDATION_SWIFT_SDK_EPOCH_AT_LEAST(8)
@property (class, readonly, strong) NSBundle *mainBundle;
#endif
+ (nullable instancetype)bundleWithPath:(NSString *)path;
- (nullable instancetype)initWithPath:(NSString *)path NS_DESIGNATED_INITIALIZER;
+ (nullable instancetype)bundleWithURL:(NSURL *)url NS_AVAILABLE(10_6, 4_0);
- (nullable instancetype)initWithURL:(NSURL *)url NS_AVAILABLE(10_6, 4_0);
+ (NSBundle *)bundleForClass:(Class)aClass;
+ (nullable NSBundle *)bundleWithIdentifier:(NSString *)identifier;
#if FOUNDATION_SWIFT_SDK_EPOCH_AT_LEAST(8)
@property (class, readonly, copy) NSArray<NSBundle *> *allBundles;
@property (class, readonly, copy) NSArray<NSBundle *> *allFrameworks;
#endif
...
メインバンドルを見用 例えば、ヘッダー。今度はproperty
と宣言されていますが、class
というキーワードです。私はそれがclass level property
の略だと思う。 OK。
スクロールダウンした後、これらのコードが見つかりました。
#define NSLocalizedString(key, comment) \
[NSBundle.mainBundle localizedStringForKey:(key) value:@"" table:nil]
#define NSLocalizedStringFromTable(key, tbl, comment) \
[NSBundle.mainBundle localizedStringForKey:(key) value:@"" table:(tbl)]
どのように、mainBundle
にアクセスしますか。しかし、私はJetBrainsのAppCodeを使用しています。このIDEはこのような構造を無効なコードとして扱います。 ,,[NSBundle mainBundle]
が無効になります。+ (instancetype)mainBundle
メソッドが存在しません。
私の質問は、私は何とかXcodeのスイッチングずに古いObjectiveCスタイルのコーディングに切り替えることができます IS?あなたのIDE /コンパイラが、その後正しく[NSBundle mainBundle]
をコンパイルされていない場合
+ (NSBundle *)mainBundle;
(または同等:(静的アナライザとスウィフトAPIの生成を助け、いくつかの追加のメタデータを持つ)これと同等です
だから、Xcodeのか、AppCodeについてのご質問はありますか? – Kreiri
"' [NSBundle mainBundle] 'が無効になります"何に応じて無効ですか? "class property"宣言は、そのメソッドを宣言します。それは実際にはそうです。 –