簡體   English   中英

Objective-c Iphone如何設置屬性的默認值

[英]Objective-c Iphone how to set default value for a property

您好我在ViewController.h中有以下代碼:

#import <UIKit/UIKit.h>

@interface CalcViewController : UIViewController {
    NSNumber* result;
    NSString* input;
    //NSString* input = @"";

    IBOutlet UITextField* display;
}

@property (retain) NSNumber* result;
@property (retain) NSString* input;
@property (nonatomic, retain) UITextField* display;

@end

問題是我想在輸入中附加一個字符串,但是當它仍為空時這是不可能的。 這就是為什么我想將輸入的默認值設置為@“”。 但是我在哪里放這個代碼。

我知道一個可能的解決方案,你把它放在一個默認的構造函數中。 但我不知道在哪個文件中放這個。 我應該在哪里打電話。

遺憾的是,我對C的理解有限,並且意識到也許.h文件不是正確的地方。

如果您需要,項目類型是基於視圖的應用程序。

希望你能幫忙。

您可能會發現閱讀Objective-C或Cocoa上的一些文檔很有用。 如果您在StackOverflow或Google上執行搜索,您可能會在閱讀材料上找到一些很好的建議。

要回答你的問題,你應該有一個@implementation of CalcViewController。 人們通常會將此@implementation放在* .m文件中。 如果您的* .h文件名為“ViewController.h”,那么實現將進入“ViewController.m”。

然后,您將創建UIViewController的初始化函數的副本並將其放在那里(我不知道默認的init函數是什么)。

例如:

@implementation CalcViewController

@synthesize result;
@synthesize input;

- (id)initWithNibName:(NSString*)aNibName bundle:(NSBundle*)aBundle
{
    self = [super initWithNibName:aNibName bundle:aBundle]; // The UIViewController's version of init
    if (self) {
        input = [[NSString alloc] initWithString:@""]; // You should create a new string as you'll want to release this in your dealloc
    }
    return self;
}

- (void)dealloc
{
    [input release];
    [super dealloc];
}
@end // end of the @implementation of CalcViewController

筆記:

  • 您可能希望將文件重命名為CalcViewController。 我相信Xcode的重構引擎更容易處理。
  • 當您將它與Interface Builder連接時,您不需要為顯示實例變量聲明@property。 除非您希望CalcViewController的客戶端經常更改它

編輯: 2009年4月28日:美國東部時間上午10:20:我建議實際分配一個NSString,因為你應該在dealloc技術上釋放它。

編輯: 2009年4月28日:美國東部時間上午11:11:我更新了@implementation以使用UIViewController的init版本。

非常好的問題。 簡短的回答是在init函數中初始化值。 您需要覆蓋默認的init函數,以便在使用對象之前准備好默認值。 我想建議人們不要建議其他人閱讀文件; 如果可以,請直接回答問題。

另一種選擇是為輸入屬性編寫自己的getter,如果實例變量為nil則返回@“”。 即使您意外或故意將nil分配給輸入,這也會起作用,而使用init設置默認值會中斷。

最明顯的實現方式如下:

  1. 在viewcontroller.m文件中,覆蓋默認的init方法。 每次初始化視圖控制器時都會調用此方法。 因此,這是初始化變量的最佳方式。

     - (id)initWithNibName:(NSString*)aNibName bundle:(NSBundle*)aBundle { self = [super initWithNibName:aNibName bundle:aBundle]; // The UIViewController's version of init if (self) { varName = [[NSString alloc] initWithString:@""]; } return self; } 
  2. 現在,在您的代碼中,您想要將字符串附加到原始字符串,只需使用: varName = [NSString stringwithformat:@"%@%@", varName, newString];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM