2010-07-31 17 views
17

Birkaç özellikli bir protokol tanımlamak istiyorum ve bu özellikleri başka bir NSObject alt sınıfında kullanmanız gerekir. Lütfen bana link veya örnek kod verin. 10.5 ile çalışmak için buna ihtiyacım var.Protokolde özellikler nasıl tanımlanır ve uygulanır

Teşekkür Aşağıdaki örnek kod eklendi

@protocol MyProtocol 
@property (nonatomic, readonly) id someObject; 
@property (nonatomic, getter=isAlive) BOOL alive; 
@end 

#import "MyProtocol.h" 
@interface MyCustomClass : NSObject <MyProtocol>{ 

} 
@end 

#import "MyCustomClass.h" 
@implementation MyCustomClass 
@synthesize someObject,alive; 

/* 
- (id)someObject { 
    return nil; 
} 

- (BOOL)isAlive { 
    return YES; 
} 

- (void)setAlive:(BOOL)aBOOL { 
} 
*/ 
@end 

** LÜTFEN KONTROL EDİN: x86_64 mimarisi ile compling kod çalışıyor. .

MyCustomClass.m:13: error: synthesized property 'someObject' must either be named the same as a compatible ivar or must explicitly name an ivar 

error: synthesized property 'alive' must either be named the same as a compatible ivar or must explicitly name an ivar 
Sadece @synthesize ile x86_64 içinde değil i386 çalışıyor neden bilmek istiyorum

**

cevap

33
i i386 için mimari değiştireceğiz Ama eğer hata, o zaman ben şu uyarılar alıyorum

@property sadece derleyiciye, sınıfın bu özelliğe uyan yöntemleri tanımlaması beklendiğini söylüyor. Bu protokol uygulamaya

@protocol MyProtocol 
@property (nonatomic, readonly) id someObject; 
@property (nonatomic, getter=isAlive) BOOL alive; 
@end 

her şey artık

- (id)someObject; 
- (BOOL)isAlive; 
- (void)setAlive:(BOOL)aBOOL; 
+9

Özelliklerin sentezlenmesi de, derleyiciye erişim yöntemi uygulamalarını sağlamasını bildirdiği için çalışmalıdır. –

+0

Teşekkürler, sağladığınız kod, proje mimarisini x86_64'e saklıyorum. I386 için mimariyi değiştirirseniz, aşağıdaki uyarıları alıyorum: MyCustomClass.m: 13: hata: sentezlenen özellik 'someObject' ya uyumlu bir ivar ile aynı adlı veya açıkça bir ivar hata adı gerekir: sentezlenmiş 'canlı' özelliği ya uyumlu bir ivar ile aynı şekilde adlandırılmalıdır ya da açıkça bir ivar adı olmalıdır. Sadece x86_64'te neden @synthesize ile çalıştığını ve i386'da olmadığını bilmek istiyorum. Teşekkürler – AmitSri

+0

Mümkünse daha az kod yazmaya çalışıyorum. Lütfen ayrıca, farklı mimariler arasındaki farkı ve uygulamayı derlemeyi tercih ettiğimi varsayalım. – AmitSri

1

Ben sizinle uğraşıyoruz şeyler Objective-C 2.0 tanıtımı öncelikle yan etkileri olduğunu düşünüyorum olması gerekir. Örnek vars tanımlamaksızın özellikleri bildirmek gibi şeyler yapmanıza olanak sağlar. Fakat (keşfettiğiniz gibi), sadece x86_64 ve post-10.5 uyumludur.

+0

Benzer bir hatam var. X86_64 için "yalnızca aktif mimariyi oluştur" kutusunu işaretledim. Onu tamir etti. – user523234

İlgili konular