Die Eigenschaft kann im Forward-Klassenobjekt nicht gefunden werden


77

Ich passe dieses Tutorial an meine App an und habe es auf einen letzten Fehler reduziert, der mich aufhält. Das Programm kann keine Eigenschaft in einer anderen Datei finden, diese Eigenschaft ist jedoch klar definiert. Hier ist der fragliche Code:

Die eigentliche Fehlerzeile:

for (DTContact *dtc in _dtContact.contact) {

die .h für die Datei und die fraglichen Elemente:

#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

Es gibt Probleme mit _dtContact.contact. Der Kontakt in der Datei DTCXMLResponse kann nicht gefunden werden. Hier ist die .h-Datei und der Abschnitt der .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

Also gibt es das. Wie Sie sehen können, habe ich 'Kontakt' in der DTCXMLResponse.h und in der .m verlinkt.


1
Ein Hinweis, die Zeile self.contact = [[NSMutableArray alloc] init];sollte eigentlich sein self.contact = [NSMutableArray array];, da Ihre Eigenschaft das Array bereits beibehält.
Richard J. Ross III

Ich habe das behoben, danke.
Spencer Cole

Antworten:


180

Dieser Fehler weist normalerweise darauf hin, dass Xcode Ihr Symbol nicht erkennen kann. Ich kann davon ausgehen, dass dies DTContact ist.

Versuchen Sie dies in Ihre .h-Datei einzufügen:

#import DTContact.h

Es findet die Datei, nur nicht die Eigenschaft. Ich habe bereits versucht, es zu importieren, und das ist ein No-Go.
Spencer Cole

Ich habe das tatsächlich benutzt und hatte es rückwärts. Vielen Dank!
Spencer Cole

Tolle Antwort, kurz, einfach und spricht das Problem direkt an! Vielen Dank
schneebedeckt

check @class DTContact
Kernelzero

Tolle Antwort einfach und sehr hilfreich Danke :). +1
Yogesh Patel

0

Es ist nicht relevant für Ihren Fall, aber ich habe den gleichen Fehler erhalten. Ich habe nach einer Lösung gegoogelt, aber das Problem war in meinem Code. Ich habe ein anderes Klassenobjekt verwendet, als ich einen ähnlichen Codeausschnitt in mein Projekt kopiert und eingefügt habe. Also hier ist das Problem, das ich für den gleichen Fehler hatte:

Für meine Klasse A hatte ich ein Code-Snippet wie:

    ManagedObjectOfClassA * managedObjectOfClassA = [NSEntityDescription insertNewObjectForEntityForName:@"ManagedObjectOfClassA"                                                              inManagedObjectContext:managedObjectContext];

    managedObjectOfClassA.somePropertyA = sameValue; //somePropertyA is an attribute of ManagedObjectOfClassA

Und ähnlicher Code für Klasse B:

    ManagedObjectOfClassA *managedObjectOfClassB = [NSEntityDescription insertNewObjectForEntityForName:@"ManagedObjectOfClassB" inManagedObjectContext:managedObjectContext];

    managedObjectOfClassB.somePropertyB = someValue;////somePropertyB is an attribute of ManagedObjectOfClassB

Wenn Sie genau hinschauen, bestand der Fehler darin, den entsprechenden Objekten in Klasse B die richtigen Entitäten zuzuweisen.

Das Problem liegt also im Code der Klasse B. Und der richtige Code wäre:

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

managedObjectOf ClassB . somePropertyB .someValue;

Ich hoffe das hilft jemandem.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.