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

このコード行でオブジェクトの1つにアクセスしようとします((null)を返す):

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;
}

何が問題ですか?

ありがとう!!

4

2 に答える 2

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

description は、ログに記録するときのオブジェクトのデフォルトの呼び出しであるため、問題を簡単に診断できます。

プロパティがいかに便利であるかを示すために、クラス ファイルを追加しました。

写真家の名前にアクセスしたい場合は、次のようにします。

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

お役に立てれば!

于 2012-06-03T06:44:34.717 に答える
0

次のようにする必要があります。

@property(strong, nonatomic) NSString* nameOfPhotographer;

そして、initWith....

self.nameOfPhotographer = PhotographerName;

于 2012-06-02T18:59:05.757 に答える