2011-09-05 42 views
1

對不起,在這裏不斷提出基本問題,但我不知道還有什麼要去。用滑塊,文本字段和按鈕編寫一些代碼,用於遞增滑塊以演示鍵值編碼。一切都奏效。下一步是使用'屬性'和'合成'代替訪問器和設置器方法;屬性/合成錯誤

#import <Foundation/Foundation.h> 
@interface KVCController : NSObject { 
    int fido; 
} 
@property(readwrite, assign) int fido; 
@end 

~~~~~

@implementation KVCController 
@synthesize fido; 

- (id)init{ 
    self = [super init]; 
    if (self) { 
     // Initialization code here. 
     [self setValue:[NSNumber numberWithInt:5] forKey:@"fido"]; 
     NSNumber *n = [self valueForKey:@"fido"]; 
     NSLog(@"fido = %@", n); 
    } 

    return self; 
} 
~~~~~~~ 
@end 

我得到@implementation KVCController一個未完全執行錯誤。如果我把'fido'的get和set方法放在它裏面。 @synthesize fido;發生第二個錯誤。它說屬性必須在實現中聲明。正如我所知道的,所有東西都被正確地複製出書,並且看起來就像我看過的所有其他用途的財產和綜合。任何人有什麼想法,我失蹤或做錯了什麼?

Xcode 4.1自動創建一個委託類,我通常會忽略如果我不在委託上工作。我爲KVC練習創建了自己的類,並在適當修改的基礎上添加了屬性/合成聲明並獲得了錯誤信息。我只是將屬性/合成聲明放入委託類中,將我的IBAction代碼移到適當的位置,重新綁定綁定,並刪除我創建的類,並且一切正常。屬性/合成聲明是否需要像委託材料一樣處理?

+2

另外 - 你已經聲明'fido'是一個'int',但是你正在用'NSNumber'初始化它。所有你需要做的就是編寫'fido = 5;' – Abizern

+0

作者說鍵值編碼只對對象起作用,所以我把它留在原來的樣子。把它拿出來放入fido = 5並沒有什麼區別(仍然是相同的錯誤)。我以爲你需要KVC的財產/合成聲明。 –

+0

您只能使用KVC設置對象的屬性。這並不意味着這些屬性本身需要成爲對象。 – Abizern

回答

2

不完整的執行意味着你有一個-(void)something可以在你的頭文件中定義,你沒有在你的@implementation中使用。確保您的標題中沒有列出任何未使用的方法。如果是這樣,請將其從標題中移除,或者在實施中創建該方法。

- (void) dosomething 
{ 
    /* blank for now */ 
} 

如果您的實施中有-(void)dosomething,請在您的標題中定義它。

#import <Foundation/Foundation.h> 
@interface KVCController : NSObject { 
    int fido; 
} 
@property(readwrite, assign) int fido; 
- (void) dosomething; 
@end 
+0

在練習的第一部分,作者正在執行關鍵值編碼的冗長方式,並使其工作。當他切換到屬性/合成時,我剛剛註釋掉了所有 - (int)fido, - (void)setFido和(IBAction)方法,所以頭文件中沒有額外的東西,就像我寫的一樣。 –