特定の名前 (Friend1、Friend2 など) を付けてクラスのインスタンスを動的に作成することはできますか?
いくつかのインスタンス変数 (名前と姓など) を持つ "Friends" クラスがあります。私のアプリでは、ユーザーはリストから追加したい「友達」の数を選択します。したがって、彼が 5 を選択した場合、UITableView には 10 個の空のフィールド (名前と姓) が入力されます。
これらのオブジェクトを「その場で」作成する方法を知っていますか?
特定の名前 (Friend1、Friend2 など) を付けてクラスのインスタンスを動的に作成することはできますか?
いくつかのインスタンス変数 (名前と姓など) を持つ "Friends" クラスがあります。私のアプリでは、ユーザーはリストから追加したい「友達」の数を選択します。したがって、彼が 5 を選択した場合、UITableView には 10 個の空のフィールド (名前と姓) が入力されます。
これらのオブジェクトを「その場で」作成する方法を知っていますか?
彼が 5 を選択したら、友人の配列を作成します。
friends = [[NSMutableArray alloc] init];
for (int i = 0; i < 5; i++)
[friends addObject:[[[Friend alloc] init] autorelease]];
[tableView reload];
( friends
NSMutableArray はビュー コントローラーのインターフェイス セクションで宣言されます)
そしてUITableViewDataSourceで:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (section == friendsSection)
return [friends count] * 2;
else ...;
}
実装は読者の演習として残し-tableView:cellForRowAtIndexPath:
ます。説明していない詳細が多すぎることに依存します。
さて、あなたの問題は解決しました。しかし、あなたの質問は、まだ解決されていない問題にも対処しました。「特定の名前を付けてクラスのインスタンスを動的に作成する」ため、後でこれらの名前を使用してそれらを参照できます。
オブジェクトを参照することは、本質的にメッセージを送ることを意味します。Objective-C ランタイムでは、これは を使用して行われobjc_msgSend(id theReceiver, SEL theSelector, ...)
ます。したがって、へのポインタが必要ですtheReceiver
。私はあなたの質問を「新しいインスタンスへのポインタを動的に作成された名前に関連付けることは可能ですか?」と解釈します。これは次のような辞書を使用して可能だと思い
ます:動的に識別子を作成する:NSString *myIdentifier = @"anyString";
または文字列を作成するその他の方法.次に、クラスのインスタンスを作成します。MyClass *myObject = [[MyClass alloc] init];
またはそれをインスタンス化する他の方法。最終的に関連付けを確立します。後で、オブジェクトの名前を;NSDictionary *dict = @{myIdentifier: myObject};
として使用して、オブジェクトにメッセージを送信できます。
もっと簡単にできる方法があるかもしれません...[[dict objectForKey:myIdentifier] message]