Lami Skrevet 2. februar 2013 Del Skrevet 2. februar 2013 (endret) Heisann! Holder på å programmere med objective-C og har et lite problem. Skal vise bilde i celler. Men når jeg har gjort det og skal teste appen får jeg opp: Desktop/CollectionDemo/CollectionDemo/MyCollectionViewCell.m:25:13: Use of undeclared identifier 'IconImages' i MyCollectionViewCell.m: #import "MyCollectionViewCell.h"@implementation MyCollectionViewCell #pragma mark - #pragma mark UICollectionViewDataSource -(NSInteger)numberOfSectionsInCollectionView: (UICollectionView *)collectionView { return 1; } -(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { return *IconImages.count; } -(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { MyCollectionViewCell *myCell = [collectionView dequeueReusableCellWithReuseIdentifier:@"MyCell" forIndexPath:indexPath]; UIImage *image; int row = [indexPath row]; image = [uIImage imageNamed: *IconImages[row]]; myCell.imageView.image = image; return myCell; } Slik ser min MyCollectionViewController.h ut: #import <UIKit/UIKit.h> @interface MyCollectionViewController : UICollectionViewController @property (strong, nonatomic) NSMutableArray *IconImages; @end @interface MyCollectionViewCell : UICollectionViewCell @property (strong, nonatomic) IBOutlet UIImageView *imageView; @end Og .m: #import "MyCollectionViewController.h" @interface MyCollectionViewController () @end @implementation MyCollectionViewController - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. _IconImages = [@[@"42.png", @"angel.png", @"confused.png", @"cry.png", @"curlylips.png", @"devil.png", @"frown.png", @"gasp.png", @"glasses.png", @"grin.png", @"grumpy.png", @"heart.png" @"kiki.png", @"kiss.png", @"pacman.png", @"penguin.png", @"putnam.png", @"robot.gif", @"shark.png", @"smile.png", @"squint.png", @"sunglasses.png", @"tongue.png", @"unsure.png", @"upset.png", @"wink.png",] mutableCopy]; } Hva er det jeg gjør feil? Setter pris på all hjelp, takk på forhånd! Endret 2. februar 2013 av Lami Lenke til kommentar
Psy Skrevet 2. februar 2013 Del Skrevet 2. februar 2013 Du har ingen variabel som heter IconImages, du har en property som heter IconImages, det er ikke det samme. Hvis du har ny nok versjon av XCode (husker ikke når det ble endret) så lager den get/set metoder for deg automatisk, hvis ikke, legg til @synthesize IconImages; øverst i .m fila rett under @implementation. Etterpå kan du skrive f.eks [[self IconImages] count]; for å aksessere count propertien. For å gjøre det litt mer lesbart, prøv f.eks: int count = [[self IconImages] count]; ... bruk count til ettellerannet... Ikke aksesser objective-c objekter med * som når du prøver å skrive *IconImages. Bruk message syntaxen, dvs. [iconImages navnPåFunksjon]. Start propertynavn med liten bokstav, da får du generert metodenavn som matcher resten av objective-c apiet. Lenke til kommentar
Lami Skrevet 3. februar 2013 Forfatter Del Skrevet 3. februar 2013 (endret) Takk for svar! Jeg la til @synthesize iconImages; der du sa, men får fortsatt samme meldingen. Og hvor er det du mener jeg skal skrive inn int count = [[self IconImages] count];? Der ved return eller? Og når det gjalt *, mener du at jeg skal skrive inn slik her f.eks: image = [uIImage imageNamed: *iconImages[row]]; til image = [iconImages UIImage] Beklager, jeg er nub på dette! EDIT: Jeg bruker forresten nyeste versjon av Xcode. Endret 3. februar 2013 av Lami Lenke til kommentar
Psy Skrevet 3. februar 2013 Del Skrevet 3. februar 2013 Se her: #import <UIKit/UIKit.h> @interface MyCollectionViewController : UICollectionViewController @property (strong, nonatomic) NSMutableArray *IconImages; @end @interface MyCollectionViewCell : UICollectionViewCell @property (strong, nonatomic) IBOutlet UIImageView *imageView; @end Du har definert IconImages i Controller klassen men du prøver bruke den i Cell klassen. Dette kan jeg aldri tenke meg vil fungere uten videre og forklarer alle feilene rundt IconImages innenfor MyCollectionViewCell.m. Om man ser bort ifra dette og ser kun på syntax: I error listingen du har postet referes det til MyCollectionViewCell.m. I denne fila har du bl.a. skrevet -(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { return *IconImages.count; } Her er det flere feil. For det første er IconImages en property og bør aksesseres slik: [self IconImages]. I tillgg er count en property på IconImages igjen og bør aksesseres på samme måte. Om du skriver det om til return [[self IconImages] count]; kan det hende det fungerer bedre. På den neste feilen, image = [uIImage imageNamed: *iconImages[row]]; så er også iconImages aksessert feil. For det første skal det være en stor I og deretter prøver du aksessere som array som ikke gir mening. NSMutableArray har en objectAt selector som gir deg objektet på det indexet. Altså burde du skrevet noe ala image = [uIImage imageNamed: [[self IconImages] objectAtIndex:row]]; Tror du mangler litt basiskunnskaper rundt objective-c om hvordan objekter fungerer og hvordan du bruker de. Kan anbefale denne boken som jeg leste selv når jeg startet med objective-c (forutsetter du kan noe om objektorientering og programmering fra før, for eksempel et annet språk): http://www.amazon.co...erd+ranch+guide. Hvis du leser denne er det lurt å gjøre oppgavene i boka samtidig for å få syntaxen inn i fingrene. Det blir endel bør her, men det er fordi objective-C deseverre (min mening ivertfall) har innført alternative måter å skrive ting på sånn at det skal se mer ut som C, som dot-syntax o.l. Anbefaler å ikke bruke dette slik at du lett ser hva som er objective-C og hva som ikke er det. Ivertfall mens du er i begynnerstadiet. Lenke til kommentar
Lami Skrevet 9. februar 2013 Forfatter Del Skrevet 9. februar 2013 (endret) Tusen takk for svar! Har nå endret på det, men nå får jeg følgende error: No visible @interface for 'MyCollectionViewCell' declares the selector 'IconImages' når jeg endret til return [[self IconImages] count]; Skal se på den boken når jeg er ferdig med denne Endret 9. februar 2013 av Lami Lenke til kommentar
Psy Skrevet 12. februar 2013 Del Skrevet 12. februar 2013 #import <UIKit/UIKit.h> @interface MyCollectionViewController : UICollectionViewController @property (strong, nonatomic) NSMutableArray *IconImages; @end @interface MyCollectionViewCell : UICollectionViewCell @property (strong, nonatomic) IBOutlet UIImageView *imageView; @end Stemmer det, UICollectionViewController inneholder property IconImages, ikke MyCollectionViewCell. Vanskelig å si hva du skal gjøre da det er en logisk brist et sted og ikke et programmatisk problem. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå