2012-02-07 100 views
4

我想創建一個名爲Note的對象。然後,我想爲它的字段指定一些值並將它們顯示在控制檯中,以驗證所有這些都可以正常工作。iOS創建對象

 Note.h 
#import <Foundation/Foundation.h> 

@interface Note : NSObject 
{ 
    NSNumber *position; 
    NSString *syllable; 
} 
@property(nonatomic, retain)NSNumber *position; 
@property(nonatomic, retain)NSString *syllable; 
@end 

    Note.m 

#import "Note.h" 

@implementation Note 
@dynamic position; 
@dynamic syllable; 
@end 

在此之後,在另一個類中,我想分配一些值給字段。

-(void) configNote:(Note*)not 
{ 
    not = [Note alloc]; 
    [not setPosition:[NSNumber numberWithInt:2]]; 
    [not setSyllable:@"Twin-"]; 
} 


..... 
Note *note; 

[self configNote:note]; 

NSLog(@" pos : %d syl : %@ ",[[note position] integerValue],[note syllable]); 

我試圖用@synthesize而不是@dynamic,但仍然沒有改變。錯誤的原因是:-[Note setPosition:]: unrecognized selector sent to instance 0x733d060

回答

4

init您的筆記和使用自定義的init方法來初始化實例變量和變化的動態合成 和更好地利用這個初始化來初始化varibales

- (id)initWithPosition:(NSNumber*)pos andSyllable:(NSString*)syl { 
    self = [super init]; 
    if (self) { 
     self.position = pos; 
     self.syllable= syl; 
    } 
    return self; 
} 
+1

基本上是正確的,雖然沒有必要重寫-init。接受屬性的默認值nil是很好的,除非問題域禁止這樣做。 – 2012-02-07 07:31:13

0

如果您使用ARC,請嘗試"strong"而不是"retain"

+0

同樣的錯誤信息 – Teo 2012-02-07 07:26:38

+0

改變動態來綜合總之 – Stavash 2012-02-07 07:28:06

2

因爲你的問題是很基本的,你可能想根本在cocoadevcentral看看這個Tutorial。它做得很好,並教你一些處理對象的基礎知識。

0

你的問題是你正在通過值而不是通過引用傳遞Note對象指針到configNote:。當您將not設置爲新分配的Note對象時,configNote:內部實際上是將本地變量not設置爲該值。在調用configObject:之前,您的NSLog實際接收的對象在您的configNote:對象之外呼叫的值是原始note值。

爲了獲得我相信您的願望,請注意configObject:方法之外的Note對象分配,或者通過引用將Note對象指針傳遞給configObject: