2012-01-09 10 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"]; 
} 

編輯發表評論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"]; 
     } 
    } 
} 

您不能將無對象設置爲鍵(即[params setObject:nil forKey:@"key]會崩潰)

+0

可以向服務器提交'null'或'nil'對象嗎?我的印象是,'''或''後的所有內容都不會被考慮提交,例如在我的例子中,如果問題id是nil/null,所有後續參數像shareFb,shareTwitter,youtube_id將被截斷。 – Zhen 2012-01-09 02:29:30

+0

@ Zhen是的,第一個零對象將終止initWithObjectsAndKeys方法。我編輯了一下,告訴你如何進入每個不是零的參數。如果您從JSON填充這些值,您可能需要擴展if語句以檢查isEqual:[NSNull null]原始問題中的操作方法 – 2012-01-09 02:49:10

+0

好的,所以您在說我需要先執行檢查在我的情況下的參數。得到它了。謝謝! – Zhen 2012-01-09 03:02:48