La propiedad no se puede encontrar en el objeto de clase directo


78

Estoy adaptando este tutorial a mi aplicación, y lo he reducido a un último error, que me detiene en seco. El programa no puede encontrar una propiedad en otro archivo, pero esa propiedad está claramente definida. Aquí está el código en cuestión:

La línea de error real:

for (DTContact *dtc in _dtContact.contact) {

el .h para el archivo y los elementos en cuestión:

#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

Tiene problemas con _dtContact.contact. No puede encontrar el contacto en el archivo DTCXMLResponse. Aquí está el archivo .h y la sección del .m:

.h

#import <Foundation/Foundation.h>

@interface DTContactXMLResponse : NSObject {
    NSMutableArray *_contact;
}

@property (nonatomic, retain) NSMutableArray *contact;

@end

.metro

#import "DTCXMLResponse.h"

@implementation DTContactXMLResponse
@synthesize contact = _contact;

- (id)init {

    if ((self = [super init])) {
        self.contact = [[NSMutableArray alloc] init];
    }
    return self;

}

@end

Así que ahí está. Como puede ver, tengo 'contacto' propiedad en DTCXMLResponse.h, y enlazado en .m.


1
Una nota, la línea self.contact = [[NSMutableArray alloc] init];debería ser en realidad self.contact = [NSMutableArray array];, ya que su propiedad ya retiene la matriz.
Richard J. Ross III

Lo arreglé, gracias.
Spencer Cole

Respuestas:


181

Este error suele indicar que Xcode no puede reconocer su símbolo. Puedo asumir que esto es DTContact.

Intente insertar esto en su archivo .h:

#import DTContact.h

es encontrar el archivo, pero no la propiedad. Intenté importarlo ya, y eso no es posible.
Spencer Cole

De hecho, usé esto y lo tenía al revés. ¡Gracias!
Spencer Cole

¡Excelente respuesta, corta, simple y aborda el problema directamente! Gracias
nevado

check @class DTContact
Kernelzero

Gran respuesta simple y realmente útil Gracias :). +1
Yogesh Patel

0

No es relevante para tu caso, pero recibí el mismo error. Busqué en Google una solución, pero el problema estaba en mi código. Estaba usando un objeto de clase diferente mientras copiaba y pegaba un fragmento de código similar en mi proyecto. Así que aquí está el problema que tuve por el mismo error:

Para mi classA, tenía un fragmento de código como:

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

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

Y código similar para la clase B:

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

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

Si miras de cerca, el error fue asignar las entidades correctas a los objetos correspondientes en la clase B.

Entonces el problema está en el código de la clase B. Y el código correcto sería:

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

managedObjectOf ClassB . somePropertyB .someValue;

Espero que ayude a alguien.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.