2013-07-01 117 views
-2

我有一個問題,我希望你能幫助我。我有幾個故事板視圖的應用程序,每個都有一個單獨的視圖控制器。我希望能夠在故事板的所有視圖中使用我自己的課程。這將使每個viewcontroller中的代碼更清潔,整個應用程序更易於調試等。該類將包含變量和方法。在IOS中創建類的實例6

我的總體目標是通過按鈕從用戶收集數據,然後將這些數據存儲在數據庫中。可以查看和修改數據,並生成統計數據。

由於大多數變量和方法將用於不同的視圖和不同的時間,我想將所有這些分開放在不同的文件中。

我也可以告訴你,這不是一個懶惰的捷徑,我在網上瀏覽了數百篇帖子等等,而我仍然無處可尋。

任何輸入是非常感謝!

感謝您抽出時間來閱讀這...

SomeClass.h具有下面的代碼:

#import <Foundation/Foundation.h> 

@interface SomeClass : NSObject 
{ 
NSString *dataOne; 
NSString *dataTwo; 
NSString *dataThree; 
} 

- (void) SetDataOne: (NSString*) dataOneReceived; 
- (void) SetDataTwo: (NSString*) dataTwoReceived; 
- (void) SetDataThree: (NSString*) dataThreeReceived; 
- (void) saveSomeData; 

@end 

SomeClass.m具有下面的代碼:

#import "SomeClass.h" 

@implementation SomeClass 

- (void) SetDataOne: (NSString*) dataOneReceived { 
    dataOne = dataOneReceived; 
} 

- (void) SetDataTwo: (NSString*) dataTwoReceived { 
    dataTwo = dataTwoReceived; 
} 

- (void) SetDataThree: (NSString*) dataThreeReceived { 
    dataThree = dataThreeReceived; 
} 


- (void) saveSomeData { 
    // Here I do stuff with dataOne etc… 
} 



@end 

SomeView.h有以下代碼:

#import <UIKit/UIKit.h> 
#import "HeadViewController.h" 
#import "SomeClass.h" 


@interface SomeView : UIViewController 

// contains stuff not needed to show here 

- (IBAction)Done:(id)sender; 

@end 

SomeView.m具有下面的代碼:

#import "SomeView.h" 
#import "SomeClass.h" 


@interface SomeView() 

@end 

@implementation SomeView 


- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    SomeClass *someClassObject = [[SomeClass alloc] init]; 
    // Do any additional setup after loading the view. 
} 

// Other standard methods omitted 


- (IBAction)Done:(id)sender { 

    [someClassObject SetDataOne: @」whatever text」]; 
    [someClassObject SetDataTwo: @」whatever text」]; 
    [someClassObject SetDataThree: @」whatever text」]; 
    [someClassObject SaveSomeData]; 

    Error Msg for all the above: 」Use of Undeclared Identifier ’someClassObject’ 
} 

@end 

註釋:您可以看到錯誤消息我在上面的代碼年底獲得。我不知道我做錯了什麼。我已經看過很多關於如何創建和調用類的示例,但似乎無法解決我的問題。另外,我看到一些在「main.m文件」中放置了「SomeClass * someClassObject = [[SomeClass alloc] init];」。如果我理解正確,那麼該文件是應用程序啓動時加載的第一個文件。如果是這樣,那麼我不能把它放在那裏,因爲我將不得不在幾個不同的視圖和其他時間創建我的課程的實例,而不是在應用程序啓動時。這就是我將它放在viewDidLoad方法中的原因。

+4

「該文件是應用程序啓動時加載的第一個文件」 - 我建議您在嘗試深入iOS開發之前先回到一步並學習C語言。不加載文件,而是調用函數,'main()'是第一個。 – 2013-07-01 19:13:13

+1

縮小您的問題並刪除不必要的代碼片段。在目前的形式下,這是一個無法引導的問題。 – allprog

+0

我認爲你需要找到一些關於編程的好書。 「上網衝浪幾個小時」不是學習編程的方式。 –

回答

0

someClassObject設置裏面viewDidLoad中和,因爲它不存儲裏面的觀點將在那同樣的方法結束時刪除

0

您應該添加你的對象的每個頭文件的接口部分裏面是這樣的:

SomeView.h

#import <UIKit/UIKit.h> 
#import "HeadViewController.h" 
#import "SomeClass.h" 


@interface SomeView : UIViewController 
{ 
SomeClass *someClassObject; 
} 

// contains stuff not needed to show here 

- (IBAction)Done:(id)sender; 

@end 

然後,當你實例someClassObject裏面viewDidLoad中,將持續整個這一觀點。

+0

謝謝! 但它不起作用,我得到錯誤味精「沒有可見的@界面'TeeStat'declares選擇'SetClubHit'等... –

1

一對夫婦的想法:

  1. 你讓someClassObjectviewDidLoad方法的局部變量。看起來你打算把它變成一個類實例變量(或者更好的是一個私有類屬性,它將爲你合成實例變量)。因此:

    @interface SomeView() 
    
    @property (nonatomic, strong) SomeClass *someClassObject; 
    
    @end 
    
    @implementation SomeView 
    
    - (void)viewDidLoad 
    { 
        [super viewDidLoad]; 
        self.someClassObject = [[SomeClass alloc] init]; 
    } 
    
    - (IBAction)done:(id)sender { 
    
        [self.someClassObject setDataOne: @"whatever text"]; 
        [self.someClassObject setDataTwo: @"whatever text"]; 
        [self.someClassObject setDataThree: @"whatever text"]; 
        [self.someClassObject saveSomeData]; 
    
        // should resolve the Error Msg for all the above: 」Use of Undeclared Identifier ’someClassObject’ 
    } 
    
  2. 順便說一句,作爲慣例的問題,你的method names should start with a lowercase letter(例如setDataOneSetDataOnedone而非Done,等),如上述所示。

  3. 如果你打算寫自己制定者,setDataOnesetDataTwo,等等,你還不如刪除這三個實例變量,刪除你的三個setData___方法,並替換類屬性三個實例變量(和讓編譯器不僅合成實例變量,而且也合成器)。

+0

感謝您花時間,非常感謝! 只要1.去,它在我的程序中似乎沒什麼問題,除了它在「任何文本」之前抱怨「@」這個標記之外 至於第二點,注意點 –

+0

最後就三個而言,我會嘗試這個,看起來更簡潔明瞭,謝謝! –

+0

@MrEmkei關於抱怨「@」,我懷疑它確實在抱怨引號,我只是剪下並粘貼了你的代碼,但我注意到你原始代碼示例使用了引號(「關閉」引號),並且我更新了我的答案以使用普通的舊引號。也許您在某個文字處理器中編輯了問題,用捲曲引用標出了標準引號。 (我知道它們看起來很相似,但它們完全不同)。 – Rob