在转发类对象中找不到属性
Posted
技术标签:
【中文标题】在转发类对象中找不到属性【英文标题】:Property cannot be found in forward class object 【发布时间】:2011-12-20 15:07:05 【问题描述】:我正在调整 This tutorial 以适应我的应用程序,但我已经把它归结为最后一个错误,这让我停止了前进。程序无法在另一个文件中找到属性,但该属性已明确定义。这是有问题的代码:
实际错误行:
for (DTContact *dtc in _dtContact.contact)
文件的 .h 和相关项目:
#import <UIKit/UIKit.h>
@class XMLTestViewController;
@class DTCXMLResponse;
@interface XMLTestController : UIViewController
UIWindow *window;
XMLTestViewController *viewController;
DTCXMLResponse *_dtContact;
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet XMLTestViewController *viewController;
@property (nonatomic, retain) DTCXMLResponse *dtContact;
@property (nonatomic, retain) IBOutlet UIButton *mybutton;
-(IBAction)buttonClicked;
@end
_dtContact.contact 存在问题。它在文件 DTCXMLResponse 中找不到联系人。这是 .h 文件和 .m 的部分:
.h
#import <Foundation/Foundation.h>
@interface DTContactXMLResponse : NSObject
NSMutableArray *_contact;
@property (nonatomic, retain) NSMutableArray *contact;
@end
.m
#import "DTCXMLResponse.h"
@implementation DTContactXMLResponse
@synthesize contact = _contact;
- (id)init
if ((self = [super init]))
self.contact = [[NSMutableArray alloc] init];
return self;
@end
就是这样。如您所见,我在 DTCXMLResponse.h 中设置了“联系人”属性,并在 .m 中进行了链接。
【问题讨论】:
请注意,self.contact = [[NSMutableArray alloc] init];
行实际上应该是 self.contact = [NSMutableArray array];
,因为您的属性已经保留了数组。
我已经解决了,谢谢。
【参考方案1】:
此错误通常表明 Xcode 无法识别您的符号。 我可以假设这是 DTContact。
尝试将其插入到您的 .h 文件中:
#import DTContact.h
【讨论】:
它正在查找文件,而不是属性。我已经尝试导入它,但这是不行的。 我实际上使用了这个,并且把它倒过来了。谢谢! 很好的答案,简短,简单,直接解决问题!谢谢 检查@class DTContact 很好的答案简单而且很有帮助谢谢:)。 +1【参考方案2】:它与您的案例无关,但我遇到了同样的错误。我搜索了一个解决方案,但问题出在我的代码中。当我在项目中复制粘贴类似的 sn-p 代码时,我使用了不同的类对象。所以这是我遇到同样错误的问题:
对于我的 classA,我有一些类似 sn-p 的代码:
ManagedObjectOfClassA * managedObjectOfClassA = [NSEntityDescription insertNewObjectForEntityForName:@"ManagedObjectOfClassA" inManagedObjectContext:managedObjectContext];
managedObjectOfClassA.somePropertyA = sameValue; //somePropertyA is an attribute of ManagedObjectOfClassA
B 类的类似代码:
ManagedObjectOfClassA *managedObjectOfClassB = [NSEntityDescription insertNewObjectForEntityForName:@"ManagedObjectOfClassB" inManagedObjectContext:managedObjectContext];
managedObjectOfClassB.somePropertyB = someValue;////somePropertyB is an attribute of ManagedObjectOfClassB
如果你仔细观察,错误在于将正确的实体分配给 B 类中的相应对象。
所以问题出在B类的代码中。正确的代码是:
ManagedObjectOfClassB *managedObjectOfClassB = [NSEntityDescription insertNewObjectForEntityForName:@"ManagedObjectOfClassB" inManagedObjectContext:managedObjectContext];
managedObjectOfClassB.somePropertyB.someValue;
我希望对某人有所帮助。
【讨论】:
以上是关于在转发类对象中找不到属性的主要内容,如果未能解决你的问题,请参考以下文章
在前向类对象“CALayer”中找不到属性“cornerRadius”
在前向类对象“UIImage”中找不到属性“CGImage”
使用启用了安全管理器的 Tomcat 时,在类路径中找不到属性文件