7 Stimmen

Objective C - iOS - Eigenschaft nicht auf Objekt des Typs gefunden - beim Zugriff auf Objektvariablen

Ich baue eine UIView, die mit einem UITableView verbunden ist, das eine Liste von Einkaufsartikeln enthält und von einem Datenarray bevölkert wird, das mit einer Objektklasse (shopObjects) verbunden ist.

Hier ist meine Shop-Objekte H-Datei -

#import 

@interface shopObjects : NSObject

@property(strong) NSString *shopITitle;
@property(strong) NSString *shopIGroup;
@property(strong) NSString *shopIDesc;
@property(strong) NSString *shopIPrice;
@property Boolean offer;

-(id)initWithshopITitle:(NSString *)shopITitleD shopIGroup:(NSString *)shopIGroupD shopIDesc: (NSString *)shopIDescD shopIPrice:(NSString *)shopIPriceD offer:(Boolean )offerD;

@end

Shop Object . M-Datei

#import "shopObjects.h"

@implementation shopObjects

-(id)initWithshopITitle:(NSString *)shopITitleD shopIGroup:(NSString *)shopIGroupD shopIDesc:(NSString *)shopIDescD shopIPrice:(NSString *)shopIPriceD offer:(Boolean )offerD{
self= [super init];
if(self){
    self.shopITitle = shopITitleD;
    self.shopIGroup = shopIGroupD;
    self.shopIDesc = shopIDescD;
    self.shopIPrice = shopIPriceD;
    self.offer = (offerD);

}
return self;

}

@end

Dies ist meine View-Controller-H-Datei -

#import 
#import "shopObjects.h"

@interface shopVCSelectionViewController : UIViewController

@property (weak, nonatomic) IBOutlet UIScrollView *shopResScroller;
@property (weak, nonatomic) IBOutlet UILabel *ShopItemTitle;
@property (weak, nonatomic) IBOutlet UITextView *ShopItemDesc;
@property (weak, nonatomic) IBOutlet UILabel *ShopItemPrice;

@end

und VC .m-Datei -

#import "shopVCViewController.h"

@interface shopVCViewController ()

@end

@implementation shopVCViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
    // Benutzerdefinierte Initialisierung

  }
  return self;
}

- (void)viewDidLoad
{
[super viewDidLoad];
// Führen Sie nach dem Laden der Ansicht zusätzliche Setups durch.

// Setze Scroller
[self.shopScroll setScrollEnabled:YES];
[self.shopScroll setContentSize:CGSizeMake(320, 1100)];
 self.title = @"Shop";
 self.shopArray = [NSArray arrayWithObjects:@"1 x PT session - £25",@"3 for 2 PT sessions     - £50 ",@"1 x Running Club - £15",@"1 x PT session",   nil];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}

- (NSInteger)tableView:(UITableView *)tableView
 numberOfRowsInSection:(NSInteger)section
{
return [self.shopArray count];
}

-(UITableViewCell *)tableView:(UITableView *)tableView
    cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier =@"Cell";
UITableViewCell *cell = [tableView
                         dequeueReusableCellWithIdentifier:CellIdentifier      forIndexPath:indexPath];
cell.textLabel.text=[self.shopArray  objectAtIndex:indexPath.row];

return cell;
}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Ressourcen freigeben können.
}

Ich versuche, die Labels/Textfelder mit den entsprechenden Objektvariablen zu verbinden - aber das shopObjects-Objekt/ die zugehörigen Variablen erscheinen nicht im Vorhersagetext, und ich erhalte den folgenden Fehler 'property not found' - Ich habe keine Ahnung warum! Kann jemand bitte einen Rat geben?

Bildbeschreibung hier eingeben

7voto

Simon McLoughlin Punkte 8128

Sie haben shopObjects nicht in Ihrem ViewController vererbt. Es handelt sich um ein separates Objekt. Sie müssen eine Variable vom Typ shopObjects erstellen, seine Eigenschaften setzen und dann darauf zugreifen. z.B.

shopVcSelectionViewController.h

@property (strong, nonatomic) shopObjects *shopObject;

shopVcSelectionViewController.m

...
self.shopItemTitle.text = self.shopObject.shopTitle
...

1voto

Duncan C Punkte 121623

Der von Ihnen gepostete Code befindet sich in einer Instanzmethode der Klasse shopSelectionViewController. Ein shopSelectionViewController hat eine Eigenschaft shopItemTitle, aber keine shopITitle Eigenschaft.

Diese Zeile

self.shopItemTitle.text = self.shopITitle;

Macht keinen Sinn.

Wenn Sie versuchen, einen Titel aus einem Objekt der Klasse "shopObjects" abzurufen, dann bräuchten Sie etwas wie dies:

shopObjects *someShopObject = //Code zum Abrufen eines shopObject
self.shopItemTitle.text = someShopObject.shopITitle;

1voto

Kayce Basques Punkte 21733

Sie sehen diesen Fehler auch, wenn Sie eine Objektinstanz haben, die denselben Namen wie eine Klasse hat, und versehentlich auf die Klasse und nicht auf Ihre Instanz zugreifen (danke, Xcode Auto-Completion).

Zum Beispiel, nehmen wir an, Sie haben einen Ansichtscontroller SetSignsViewController und Sie erstellen eine Instanz des Ansichtscontrollers namens setSignsViewController:

SetSignsViewController *setSignsViewController =
    (SetSignsViewController *) uiNavigationController.topViewController;

Sie möchten den Namen einer Eigenschaft namens openHouseLocation setzen:

SetSignsViewController.openHouseLocation = self.openHouseLocation;

Dies führt zu Eigenschaft 'openHouseLocation' nicht gefunden für Objekt vom Typ 'SetSignsViewController', weil Sie auf SetSignsViewController und nicht auf setSignsViewController zugreifen (der erste Buchstabe sollte ein s sein, nicht ein S). Was Sie wirklich gemeint haben, war:

setSignsViewController.openHouseLocation = self.openHouseLocation;

-1voto

Tendulkar Punkte 5560

Versuchen Sie, die Variablen in der .m-Datei von ShopObjects mit @synthesize zu verknüpfen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X