1

-voidクラスメソッドでその文字列を取得する必要があるメソッドで設定した文字列値があります+

+メソッドに変更できない-ので、その文字列を取得する別の方法を見つける必要があります。

@synthesize folderPathName=_folderPathName;

-(void)loadFolderPathName:(NSString *)folder{

    _folderPathName=[[NSString alloc] initWithString:folder];

}

+(NSString *)getDocumentsDirectory
{

   // NSString *pathwithFoldername=[NSString stringWithFormat:@"Documents/%@",_folderPathName];
    NSString *documentsDirectory = [NSHomeDirectory() 
                                    stringByAppendingPathComponent:pathwithFoldername];
    return documentsDirectory;
}

私は次のようなものを試しました

-(NSString *) getFolderPathName{

    return _folderPathName;
}

しかし、これも

NSString *pathwithFoldername=[FileUtils getFolderPathName];

またはこの許可された関数呼び出し

NSString *pathwithFoldername=[self getFolderPathName];

その文字列を取得して+メソッドで使用するにはどうすればよいですか?

4

2 に答える 2

2

.mファイルで静的NSString変数を宣言する必要があります。

static NSString *Path;

次に、次のようなメソッドを追加します。

+(NSString *)valueOfPath
{
  return Path;
}

を設定する場所でこの変数を設定する必要がありますfolderPathName

このメソッドは次の方法で呼び出すことができます。

NSString *pathwithFoldername=[FileUtils valueOfPath];
于 2012-11-07T17:13:26.490 に答える
2

オブジェクト指向の基本を理解して、これが期待どおりに機能しない可能性があること、およびこのように実行すべきでない理由を理解する必要があります。

+ (void)...クラスメソッドを作成します。アプリケーション全体でこれらのメソッドは1つだけです。つまり、アプリケーション全体でクラスメソッドを呼び出すと、それらはすべて同じ場所に移動します。

- (void)...インスタンスメソッドを作成します。アプリケーション全体に多くのインスタンスが存在する可能性があり、インスタンスメソッドを呼び出すと、インスタンスの1つにのみ移動します(他のインスタンスは影響を受けません)

これには、クラスメソッドも使用できる場合にインスタンスメソッドを呼び出すことも含まれます。それらのメモリ位置は互いに分離されています。つまり、インスタンスメソッドを介してデータを設定した場合、そのデータはクラスメソッドで使用できなくなります。(これは逆に機能する可能性があります。クラスメソッドを介してデータを設定すると、インスタンスはそのクラスを参照してそのデータを取得できます)。

さて、結局のところ、私が理解しようとしているポイントは、クラスメソッドを介してデータを設定することはあまりオブジェクト指向ではないということです。個人的には、インスタンスのヘルパーとしてクラスメソッドを使用しており、インスタンスには必要なすべてのデータが含まれています。アプリケーション全体でインスタンスが1つだけであることを確認する必要がある場合は、シングルトンパターンを使用します(方法についてはこちらをご覧ください)。

今、あなたの状況では、それはあなたができることを意味します:

+(id)sharedInstance
{
    static dispatch_once_t pred;
    static MyClass *sharedInstance = nil;
    dispatch_once(&pred, ^{
        sharedInstance = [[MyClass alloc] init];
    });
    return sharedInstance;
}

-(void)loadFolderPathName:(NSString *)folder{

    _folderPathName=[[NSString alloc] initWithString:folder];

}

-(NSString *)getDocumentsDirectory
{
    NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *pathwithFoldername = [documentsDirectory stringByAppendingPathComponent:_folderPathName];

    return pathwithFoldername;
}

そして、次の方法で単一のインスタンスにアクセスします。

[MyClass sharedInstance]
于 2012-11-07T17:20:40.223 に答える