2012-01-09 4 views
0

以下のコードは、サーバーにサブミットするパラメーターを準備する方法を示しています。 if-else節をチェックして、送信するパラメータを確認します。つまり、質問IDが存在する場合は質問IDのみを送信し、それ以外の場合は質問テキストとトピックIDを送信します。NSDictionaryの重複したコードを削除するサーバーへのサブミットに使用されるパラメーター

しかし、これは少し繰り返して、私のPOVの中で最良のコーディング形式ではないと感じます。どのように私はそれがより効率的にするためにコードをリファクタリングすることができます(重複を除く)

if(self.question._id || [self.question._id isEqual:[NSNull null]]) 
{ 
    //Set up params for submission 
    NSDictionary *params= [[NSDictionary alloc] initWithObjectsAndKeys: 
          self.answer.text, @"text", 
          //if question id exists, submit question id only 
          self.question._id, @"question_id", 
          shareFb, @"fbShare", 
          shareTwitter, @"twitterShare", 
          self.question.source,@"questionSource", 
          self.answer.videoId,@"youtube_id", 
          nil 
          ]; 
} 
else 
{ 
    //Set up params for submission 
    NSDictionary *params= [[NSDictionary alloc] initWithObjectsAndKeys: 
          self.answer.text, @"text", 
          //else submit question text and topic id 
          self.question.text, @"question_text", 
          self.question.topic._id, @"topic_id", 
          shareFb, @"fbShare", 
          shareTwitter, @"twitterShare", 
          self.question.source,@"questionSource", 
          self.answer.videoId,@"youtube_id", 
          nil 
          ]; 

答えて

1

可変辞書を使用して、あなたは余分なフィールドを追加することができます

NSMutableDictionary *params= [[NSMutableDictionary alloc] initWithObjectsAndKeys: 
     self.answer.text, @"text", 
     //if question id exists, submit question id only 
     self.question._id, @"question_id", 
     shareFb, @"fbShare", 
     shareTwitter, @"twitterShare", 
     self.question.source,@"questionSource", 
     self.answer.videoId,@"youtube_id", 
     nil 
     ]; 

if(!(self.question._id == nil || [self.question._id isEqual:[NSNull null]])) 
{ 
    [params setObject:self.question.text forKey:@"question_text"]; 
    [params setObject:self.question.topic._id forKey:@"topic_id"]; 
} 

EDIT応じて1

をコメントに

のparamsのいずれかが上記ゼロであるかもしれない最初の文で設定されている場合、あなたはより慎重になる必要があるでしょう

NSMutableDictionary *params= [[NSMutableDictionary alloc] init]; 
if (self.answer.text) { 
    [params setObject:self.answer.text forKey:@"text"]; 
} 
• 
• // all the params between self.answer.text and self.answer.videoId 
• 
if (self.answer.videoId) { 
    [params setObject:self.answer.videoId forKey:@"youtube_id"]; 
} 
if(!(self.question._id == nil || [self.question._id isEqual:[NSNull null]])) 
    { 
     if(self.question.text) { 
      [params setObject:self.question.text forKey:@"question_text"]; 
     } 
     if (self.question.topic._id) { 
      [params setObject:self.question.topic._id forKey:@"topic_id"]; 
     } 
    } 
} 

キーにnilオブジェクトを設定できません(つまり、[params setObject:nil forKey:@"key]がクラッシュします)

+0

'null'または 'nil'オブジェクトをサーバーに送信しても問題ありませんか?私はa'null 'または' nil 'の後のすべてが提出のために考慮されないという印象を持っています。私の例では、question idがnil/nullの場合、それ以降のすべてのパラメタ(shareFb、shareTwitter、youtube_idなど)が途切れてしまいます。 – Zhen

+0

@ Zhen yes、最初のnilオブジェクトはinitWithObjectsAndKeysメソッドを終了します。私は編集して、各パラームを取得する方法を示しています。 JSONからこれらの値を入力する場合は、isEqualをチェックするためにif文を拡張することができます。元の質問で[NSNull null]を実行する方法 –

+0

[OK]をクリックすると、まずチェックを行う必要があります私の場合はparams。とった。ありがとう! – Zhen

関連する問題