0

NSString を目的 C の実行可能ステートメントに変換する際に問題に直面しています。

例えば、

NSString *strColorAssembly = @"[UIColor redColor]";

次に、この文字列を実行可能なコードに変換し、.color プロパティに渡す必要があります。これは単なる例です。私はすべてが動的になるプロジェクトを構築しようとしているので、誰かが先に進むための正しい方向性を教えてくれると非常に役に立ちます.

4

3 に答える 3

0

プログラムでその目標を達成できるかどうかはわかりません。私だったら、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 を使い始めない限り、コンパイルされたコードで事前に定義された色のセットに制限されるということです。

于 2013-06-19T17:50:47.553 に答える
0

あなたが探しているのはsetValue:ForKey:方法のようです。NSKeyValueCoding プロトコルに準拠するものはすべて、そのオプションを利用できます。ただし、これはkeyパーツ (つまり、プロパティの名前) に対してのみ機能します。iOS では、配布されたコードの変更を明示的に禁止しています。keys を文字列として使用し、残りのデータに対してある種のインタープリターを作成することをお勧めします。

于 2013-06-19T17:53:29.943 に答える
0

iOSではそれができません。iOS では、書き込みと実行の両方が可能なメモリ ページを割り当てることができません。

あなたが管理できる最善の方法は、文字列を取り込んで解析し、Objective-C 呼び出しにマップしようとするインタープリターです (NSClassFromStringとを使用NSSelectorFromString)。

あなたがやろうとしていることをするのではなく、代わりに Cocoa から動的言語への多くのバインディングの 1 つを使用することをお勧めします。最も一般的なものは Cocoa を Lua にバインドしていると思います。そのため、Lua コードを記述すれば、すべてが動的になります。

于 2013-06-19T17:47:40.093 に答える