2012-11-07 30 views
1

我有我設置了-void方法,我需要檢索字符串中的一類方法+如何獲得與類方法的字符串IOS

一個字符串值,我不能改變+-方法,所以我需要找出另一種檢索該字符串的方法。

@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]; 

我怎樣才能得到這個字符串,並使用它在+方法?

回答

2

您需要在.m文件中聲明靜態NSString變量。

static NSString *Path; 

然後添加一個方法,如:

+(NSString *)valueOfPath 
{ 
    return Path; 
} 

你需要設置這個變量,你設置的folderPathName

您可以通過調用這個方法:

NSString *pathwithFoldername=[FileUtils valueOfPath]; 
+0

謝謝,這似乎是個好主意,我會嘗試這種在某一時刻 –

+0

好吧,請更新如果有任何問題:) –

2

您需要了解面向對象的基本知識,瞭解如何爲你想到這可能無法正常工作,爲什麼它不應該這樣做。

+ (void)...創建一個類方法,在整個應用程序中只能有一個。這意味着如果我在整個應用程序中調用一個類方法,它們將全部移到相同的位置。

- (void)...創建實例方法。在整個應用程序中可以有很多實例,當您調用實例方法時,它只會轉到其中一個實例(其他實例方法不會受到影響)

這包括在具有類方法時調用實例方法也可用;他們的記憶位置是彼此分開的。這意味着如果您通過實例方法設置了一些數據,那麼這些數據將不能用於類方法。 (這可以反過來工作,如果通過類方法設置一些數據,實例可以通過引用其類來獲取該數據)。

現在,畢竟,我試圖解決的問題是通過類方法設置數據不是非常面向對象的。就個人而言,我使用類方法作爲實例的助手,實例包含我需要的所有數據。如果您需要確保在整個應用程序中只有一個實例,請使用Singleton模式(See how here)。現在

,在您的情況,這意味着你可以這樣做:

+(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] 
+0

謝謝你的詳細解釋,如果我不得不在不同的類中使用一個值,我會去與單身設計模式,但在我的情況下,我覺得它太多的工作要做:) –

+0

更多信息。一個嚴重的問題 - 獲取Documents目錄的代碼不正確。它應該是'NSString * documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)lastObject];'。然後追加你需要的任何路徑。 – rmaddy

+0

我會更新的,謝謝你的高舉!答案的重點在OO上,我用他們在問題中給出的代碼來表明它的應用。 – WDUK