Властивості не можна знайти в об'єкті класу forward


78

Я адаптую цей підручник до свого додатка, і я звів його до останньої помилки, яка зупиняє мене в моїх слідах. Програма не може знайти властивість в іншому файлі, але ця властивість чітко визначена. Ось код, про який йдеться:

Фактичний рядок помилки:

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.


1
Одне зауваження, рядок self.contact = [[NSMutableArray alloc] init];повинен бути насправді self.contact = [NSMutableArray array];, оскільки ваше майно вже зберігає масив.
Річард Дж. Росс III

Я це виправив, дякую.
Спенсер Коул

Відповіді:


181

Ця помилка зазвичай вказує на те, що Xcode не може розпізнати ваш символ. Я можу припустити, що це DTContact.

Спробуйте вставити це у свій .h-файл:

#import DTContact.h

це пошук файлу, тільки не властивості. Я вже намагався імпортувати його, і це не можна.
Спенсер Коул

Я насправді цим користувався і мав це назад. Дякую!
Спенсер Коул

Чудова відповідь, коротка, проста і безпосередньо вирішує проблему! Дякую
засніжений

check @class DTContact
Kernelzero

Чудова відповідь проста і дуже корисна Дякую :). +1
Йогеш Патель,

0

Це не стосується справи ур, але я отримував ту ж помилку. Я шукав рішення, але проблема полягала в моєму коді. Я використовував інший об’єкт класу, коли копіював вставку подібного фрагмента коду у свій проект. Отже, ось проблема, яка була у мене за ту саму помилку:

Для мого 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;

Сподіваюся, це комусь допомагає.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.