0

私は次のようなものがあります

#define IS_IPHONE_5 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )

AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:@"https://www.test.com/"]];

KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"xyz" accessGroup:nil];

すべてのファイルで常に定義する必要があります。それらを1つのファイルで定義し、毎回インポートする方法はありますか?

編集

提案されたように、これをアプリのデリゲートに追加しました

#import <UIKit/UIKit.h>
@class AFHTTPClient;
@class KeychainItemWrapper;

@interface TestAppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;
@property (nonatomic, strong, readonly) AFHTTPClient *httpClient;
@property (nonatomic, strong, readonly) KeychainItemWrapper *keychainItem;
@end

次に、ビューコントローラでhttpClientを次のように定義しようとしました。

httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:@"https://www.test.com/"]];

それは私に言うエラーを与えますuse of undeclared identifier 'httpClient'

4

4 に答える 4

0

constants.h というファイルでグローバル変数を宣言し、必要に応じて他のファイルにインポートする必要があります。

これをしないことをお勧めします:

#define httpClient [[[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:@"https://www.test.com/"]]];

リクエストしようとしている URL の理由はさまざまです。#define のアイデアは、一定の項目を保持することです。@" https://www.test.com/ " から常にリクエストしている場合でも、それを行うことはお勧めしません。

お役に立てれば...

于 2013-03-09T16:17:15.253 に答える
0

私は何年もグローバル定数ファイルを作成していません… そのような定義のための、より適切でローカライズされた場所が常にあります。それでも、そのような機能は便利です - 答えますが、これらを必要とする実装の近くでこれらを宣言する方法を検討してください。

  • ヘッダー ファイルとソース ファイルを作成する
  • C 関数を宣言するか、クラス メソッドを持つ ObjC クラス インターフェイスを宣言します。
  • 関数/メソッドを定義する
  • 次に#import、必要な場合にのみ「グローバル定数」ヘッダー (PCH ではなく)

C 関数を使用した例:

// MONApp_Constants.h
// no #imports up here

extern bool MONApp_Is_iPhone5(void);

@class AFHTTPClient;
extern AFHTTPClient * MONApp_HTTPClient(void);

@class KeychainItemWrapper;
extern KeychainItemWrapper * MONApp_KeychainItem(void);

もちろん、インスタンスが 1 つだけ必要な場合は、オブジェクトへの参照を保持する適切な場所を見つける必要があります。その場合、関数はグローバルに可視であってはなりません。

于 2013-03-09T11:14:01.747 に答える
0

はい、宣言された定数でファイルを作成し、毎回インポートします:)

于 2013-03-09T09:12:31.850 に答える
0

多くのアプローチがあります。専用のヘッダー ファイルを作成できます。AFHTTPClientとにカテゴリを配置できますKeychainItemWrapper

私はおそらくそれらすべてを私のAppDelegate. これを行うためにインポートAFHTTPClient.hしてKeychainItemWrapper.hインAppDelegate.hする必要はありません。クラスを前方宣言するだけです。

@class AFHTTPClient;
@class KeychainItemWrapper;

@interface AppDelegate : NSObject <UIApplicationDelegate>

@property (nonatomic, readonly) BOOL isIPhone5;
@property (nonatomic, strong, readonly) AFHTTPClient *httpClient;
@property (nonatomic, strong, readonly) KeychainItemWrapper *keychainItem;

...

次に、これらのオブジェクトを実際に使用する必要があるファイルにAFHTTPClient.handを含めるだけです。KeychainItemWrapper.h

ところで、 との比較DBL_EPSILONは無意味です。まず、iOS では、はではなくCGFloatのエイリアスです。不必要に に変換しています。次に、画面の は 568 です。単精度は、-16777216 から 16777216 までのすべての整数 (568 を含む) を正確に表すことができます。等価性をテストするだけです。floatdoubledoubleheightfloat

于 2013-03-09T09:19:43.853 に答える