0

テーブルビューに表示されるアイテムのリストがあります。すべてのアイテムには、名前、写真、ランクなどのプロパティがあります。私の目標は、ユーザーが行を選択するたびに、そのプロパティを持つアイテムが新しいリストに追加されることです。

と呼ばれる新しいリストを作成しました。listOfBugsグローバルにしたいので、内部で割り当てて初期化しましたviewDidLoad。(それは適切なことですか?)

これが私のコードです:

MasterViewController.h

@interface MasterViewController : UITableViewController
{
    NSMutableArray *listOfBugs;
}
@property (strong) NSMutableArray *bugs;

MasterViewController.m

- (void)viewDidLoad
{
    [super viewDidLoad];
    listOfBugs = [[NSMutableArray alloc]init];
    self.title = @"Scary Bugs";
}
...
...
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    ScaryBugDoc *bug = [self.bugs objectAtIndex:indexPath.row];

    UIAlertView *messageAlert = [[UIAlertView alloc]
                                 initWithTitle:@"Row Selected" message:bug.data.title delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];

    [messageAlert show];
    [listOfBugs addObject:bug];
    NSLog(@"this is %@",listOfBugs);

}

を使用NSLogすると、オブジェクトが追加されていることがわかります。

ScaryBugs[1195:11303] this is <ScaryBugDoc: 0x75546e0>
2012-12-05 17:45:13.100 
ScaryBugs[1195:11303] this is <ScaryBugDoc: 0x75546e0>

少し質問があります。

1.配列listOfBugs内のオブジェクトのプロパティにアクセスするにはどうすればよいですか?

更新:これは私のために働いた:

NSLog(@"this is %@",((ScaryBugDoc *)[listOfBugs objectAtIndex:0]).data.title);

listOfBugsしかし、他のクラスからはアクセスできません。

私は自分の生活を楽にするために提案されたようにそれをプロパティに変えましたが、それでも別のクラスからアクセスすることはできません。たとえば、inlistOfBugsViewController.m return [_listOfBugs count];は、宣言されていない識別子'_listOfBugs'の使用というエラーを表示します。

2.カスタマイズされたリストをテーブルビューに入力するのに苦労したいのですが、どうすればよいですか?

それを達成した後、リストをplistとして保存し、オブジェクトを簡単に追加および削除したいので、それを考慮する必要があります。

これは私が基づいているコードです、私は新しいリストを作成するためにいくつかの調整をしただけです

4

2 に答える 2

2

これは実際には 2 つの質問です。

1) 自分のプロパティを他のクラスからアクセスできるパブリック プロパティにするにはどうすればよいですか?

これは、プロパティで行ったのと同じように行いますbugs。これを .h ファイルに追加します。

@property (strong) NSMutableArray *newList;

nonatomic別のスレッドを使用していない場合は、プロパティも使用することで少し効率化できることに注意してください( @property (nonatomic, strong))。

これを行うと、自動的に生成されるため、iVar 宣言は必要ありません。(つまり、削除できますNSMutableArray *newList;。)

2) 配列内のオブジェクトにアクセスするにはどうすればよいですか?

配列内のオブジェクトはidオブジェクトとして格納されます。つまり、それは「汎用」オブジェクトです。格納されているオブジェクトのタイプがわかっている場合は、そのクラスに適したプロパティとメソッドをコンパイラが認識できるように、それが何であるかをコンパイラに伝える必要があります。これを行うには、変数を適切な型にキャストします。

ScaryBugDoc *bug = (ScaryBugDoc *)[self.newList objectAtIndex:0];

次に、(上記のポイント 1 で説明したように) public であると仮定して、次のようにオブジェクトのプロパティにアクセスできます。

NSLog(@"this is %s", bug.data.tile);
于 2012-12-05T18:47:14.540 に答える
0

さて、コメントに基づいて、これはうまくいくはずです:

Album* tempAlbum = [albumList objectAtIndex:i];
//now you can access album's properties
Song* tempSong = [album.songs objectAtIndex:j];
//now you can access song's properties

これは次のように簡略化できます。

Song* someSong = [((Album)[albumList objectAtIndex:i]).songs objectAtIndex:j];

NSArray からオブジェクトを返す場合、またはそのようなコレクション オブジェクトを返す場合、汎用 ID オブジェクトが返されます。これは、適切なプロパティにアクセスできるように、期待されるオブジェクトに型キャストする必要があります。

于 2012-12-05T16:58:19.253 に答える