Вопрос по arrays, xcode, objective-c – доступ к объекту массива

0

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

    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]]

обновление: код фотоэлемента:

-(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 !!

Добавьте код для PhotoItem. user1078065
может быть, вам нужно набрать результат приведения массива. rishi
как вас зовут фотограф? lu yuan
Зачем использовать [NSString stringWithFormat ...], когда nameOfPhotographer скорее всего возвращает строку? GoZoner

Ваш Ответ

2   ответа
0

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

@property(strong, nonatomic) NSString* nameOfPhotographer;

И вinitWith....

self.nameOfPhotographer = photographerName;

Error: User Rate Limit Exceeded 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

Надеюсь это поможет!

Error: User Rate Limit Exceededmikeash.com/pyblog/…Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded APRULE
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededstackoverflow.com/questions/192721/…Error: User Rate Limit Exceeded

Похожие вопросы