NSString を目的 C の実行可能ステートメントに変換する際に問題に直面しています。
例えば、
NSString *strColorAssembly = @"[UIColor redColor]";
次に、この文字列を実行可能なコードに変換し、.color プロパティに渡す必要があります。これは単なる例です。私はすべてが動的になるプロジェクトを構築しようとしているので、誰かが先に進むための正しい方向性を教えてくれると非常に役に立ちます.
プログラムでその目標を達成できるかどうかはわかりません。私だったら、NSString (または NSInteger) を受け取り、UIColor を返すメソッドを実装します。
- (UIColor *)colorDecode:(NSString *)colorPassed
{
if ([colorPassed isEqualToString @"red"])
{
return [UIColor redColor];
}
else if
.
.
.
}
また
- (UIColor *)colorDecodewithInt:(NSUInteger)colorIndex
{
switch (colorIndex)
{
case (0)
{
return [UIColor redColor];
break;
}
case (1)
.
.
.
.
default
{
return <some default color>;
break;
}
}
}
編集: UIColor オブジェクトのコレクションで構成される NSDictionary も使用できると思います。肝心なのは、RGB 値を動的に渡すことができる時点で CGColor を使い始めない限り、コンパイルされたコードで事前に定義された色のセットに制限されるということです。
あなたが探しているのはsetValue:ForKey:
方法のようです。NSKeyValueCoding プロトコルに準拠するものはすべて、そのオプションを利用できます。ただし、これはkey
パーツ (つまり、プロパティの名前) に対してのみ機能します。iOS では、配布されたコードの変更を明示的に禁止しています。key
s を文字列として使用し、残りのデータに対してある種のインタープリターを作成することをお勧めします。
iOSではそれができません。iOS では、書き込みと実行の両方が可能なメモリ ページを割り当てることができません。
あなたが管理できる最善の方法は、文字列を取り込んで解析し、Objective-C 呼び出しにマップしようとするインタープリターです (NSClassFromString
とを使用NSSelectorFromString
)。
あなたがやろうとしていることをするのではなく、代わりに Cocoa から動的言語への多くのバインディングの 1 つを使用することをお勧めします。最も一般的なものは Cocoa を Lua にバインドしていると思います。そのため、Lua コードを記述すれば、すべてが動的になります。