在转发类对象中找不到属性

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 时,在类路径中找不到属性文件

致命错误:在 ConnectionFactory.php 中找不到类 ConnectionWrapper

数据库中有属性但是在idea中找不到

Grails RestBuilder在签名中找不到带有对象的endPoint