web-dev-qa-db-ja.com

フォワードクラスオブジェクトにプロパティが見つかりません

私は このチュートリアル を自分のアプリに適応させていますが、最後の1つのエラーに落ち着きました。プログラムは別のファイルでプロパティを見つけることができませんが、そのプロパティは明確に定義されています。問題のコードは次のとおりです。

実際のエラー行:

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にリンクされています。

72
Spencer Cole

このエラーは通常、Xcodeがシンボルを認識できないことを示しています。これはDTContactであると想定できます。

これを.hファイルに挿入してみてください。

#import DTContact.h
168
shannoga

Urの場合には関係ありませんが、同じエラーが発生していました。私は解決策を探しましたが、問題はコードにありました。私のプロジェクトに同様のコードのスニペットをコピーして貼り付けていたので、別のクラスオブジェクトを使用していました。だから、ここに私が同じエラーに対して持っていた問題があります:

私のclassAには、次のようなコードスニペットがありました。

    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のコードにあります。正しいコードは次のようになります。

ManagedObjectOf ClassB * managedObjectOfClassB = [NSEntityDescription insertNewObjectForEntityForName:@ "ManagedObjectOf ClassB" inManagedObjectContext:managedObjectContext];

managedObjectOf ClassB ..somePropertyB。someValue;

私はそれが誰かを助けることを願っています。

0
Priyanka