2012-06-02 2 views
0

Я создаю массив, и я инициализирую его объектами. Я попытался получить доступ к объекту массива, но я получил (null). что я делаю неправильно?доступ к объекту массива

photoArray = [[NSMutableArray alloc] init]; 
    PhotoItem *photo1 = [[PhotoItem alloc] initWithPhoto:[UIImage imageNamed:@"1.jpg"] name:@"roy rest" photographer:@"roy"]; 
    PhotoItem *photo2 = [[PhotoItem alloc] initWithPhoto:[UIImage imageNamed:@"2.jpg"] name:@"roy's hand" photographer:@"roy"]; 
    PhotoItem *photo3 = [[PhotoItem alloc] initWithPhoto:[UIImage imageNamed:@"3.jpg"] name:@"sapir first" photographer:@"sapir"]; 
    PhotoItem *photo4 = [[PhotoItem alloc] initWithPhoto:[UIImage imageNamed:@"4.jpg"] name:@"sapir second" photographer:@"sapir"]; 
    [photoArray addObject:photo1]; 
    [photoArray addObject:photo2]; 
    [photoArray addObject:photo3]; 
    [photoArray addObject:photo4]; 

я пытаюсь получить доступ к одному из объектов этой строки кода (возвращающих (нуль)):

photoName.text = [NSString stringWithFormat:@"%@", [[photoArray objectAtIndex:2] nameOfPhotographer]] 

обновление: код photoitem:

-(id)initWithPhoto:(UIImage*)image name:(NSString*)photoName photographer:(NSString*)photographerName 
{ 
    self = [super init]; 
    if(self) 
    { 
    imageItem = image; 
    name = photoName; 
    nameOfPhotographer = photographerName; 


    //[self setName:photoName]; 
    //[self setNameOfPhotographer:photographerName]; 
    //[self setImageItem:image]; 
} 
return self; 
} 

в чем проблема?

thnks !!

+0

ваше имяOfPhotographer? –

+1

Добавить код для PhotoItem. – user1078065

+0

Возможно, вам нужно будет ввести результат массива. – rishi

ответ

0

Вы должны сделать что-то вроде этого:

@property (сильный, неатомический) NSString * nameOfPhotographer;

И initWith....

self.nameOfPhotographer = photographerName;

+0

все еще не работает ... – APRULE

0

Во-первых, убедитесь, что ваш файл PhotoItem Интерфейс похож на это:

@interface PhotoItem : NSObject 
{ 
    UIImage *imageItem; 
    NSString *name; 
    NSString *photographer; 
} 

@property (nonatomic, retain) UIImage *imageItem; 
@property (nonatomic, retain) NSString *name; 
@property (nonatomic, retain) NSString *photographer; 


@end 

Во-вторых убедитесь, что ваша реализация отчасти так:

@implementation PhotoItem 
@synthesize imageItem, name, photographer; 

-(id)initWithPhoto:(UIImage*)image name:(NSString*)photoName photographer:(NSString*)photographerName 
{ 
    self = [super init]; 

    if(self) 
    { 
    self.imageItem = image; 
    self.name = photoName; 
    self.photographer = photographerName; 
    } 

    return self; 
} 

- (NSString *)description 
{ 
    return [NSString stringWithFormat:@"name:%@\nphotographer:%@", self.name, self.photographer]; 
} 

@end 

Теперь, так как описание вызова по умолчанию на объекте, когда вы его регистрируете, вы можете сейчас легко диагностировать свою проблему.

Я добавил файлы классов, чтобы показать вам, насколько удобными могут быть свойства.

Теперь, когда вы хотите получить доступ сказать имя фотографа, просто сделать:

photo1.photographer 

Хорошо, теперь в вашем коде, вместо того, чтобы бросить все в массив сразу же это, чтобы убедиться, что все работает :

PhotoItem *photo1 = [[PhotoItem alloc] initWithPhoto:[UIImage imageNamed:@"1.jpg"] name:@"roy rest" photographer:@"roy"]; 

NSLog(@"%@", [photo1 description]); 

Они должны быть на самом деле, код класса, который я вам дал, должен работать нормально. Теперь поместите их все в массив как хотеться бы, и убедиться, что все в массиве проведет сделать что-то вроде этого:

NSLog(@"%@", photoArray); //Description is the default when logging an object 
//An array will call the description method on each of it's containing objects 

Надеется, что это помогает!

+0

за обсуждение здесь, http://stackoverflow.com/questions/192721/why-shouldnt-i-use-objective-c-2-0-accessors-in-init-dealloc , вы не должны использовать атрибуты свойств в своих методах init и dealloc. – timthetoolman

+0

спасибо и очень! это работает!!! – APRULE

+0

Ваш прием.Убедитесь, что вы отметили это как ответ. – Ben

Смежные вопросы