Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Objective-C中两个参数的比较_Ios_Objective C_Cocoa Touch - Fatal编程技术网

Ios Objective-C中两个参数的比较

Ios Objective-C中两个参数的比较,ios,objective-c,cocoa-touch,Ios,Objective C,Cocoa Touch,在Objective-C中,我想将plist与我正在使用的API的结果进行比较。我使用的API返回配方的成分。我将这些结果放入一个表视图中,向用户显示配方名称和配方成分。当用户选择他们选择的任何配方时,我希望出现一个UIAlert,告诉用户天气,他们是否有该特定配方的所有成分。API中的成分将与Plist进行比较。希望这是足够清楚的,如果不只是问,我会尝试解释得更清楚 如果我理解得很清楚,用户冰箱里的成分是从plist文件中提取的 阅读plist并将其存储在NSDictionary中非常容易。然

在Objective-C中,我想将plist与我正在使用的API的结果进行比较。我使用的API返回配方的成分。我将这些结果放入一个表视图中,向用户显示配方名称和配方成分。当用户选择他们选择的任何配方时,我希望出现一个UIAlert,告诉用户天气,他们是否有该特定配方的所有成分。API中的成分将与Plist进行比较。希望这是足够清楚的,如果不只是问,我会尝试解释得更清楚

如果我理解得很清楚,用户冰箱里的成分是从plist文件中提取的

阅读plist并将其存储在NSDictionary中非常容易。然后您可以与程序返回的成分进行比较

如果plist是由您的程序生成的,那么您可以比较程序中对您有意义的任何内容:例如对象“成分”的索引。 如果不是,那么你的比较可能很弱,这取决于你选择比较什么


对于配方中的每种成分,您可以检查属于用户的相同成分的数量

你想知道所有需要的材料是否都在橱柜里。您只需要一个是或否的结果。因此,您可以从数据中进行两次安排—RequiredElements和FoodCubboard

- (BOOL) weHaveIngredients:(NSArray*)requiredIngredients inCupboard:(NSArray*)foodCupboard
{
 BOOL result = YES;
  For (id ingredient in requiredIngredients) {
      if !(foodCupboard containsObject:ingredient) {
         result = NO;
         break;
       }
  }
  return result;
}
最好使用NSSET(唯一对象的集合)。您可以轻松地从NSArray创建NSSet:

NSSet* set = [NSSet setWithArray:(NSArray*)array];
然后你可以做:

- (BOOL) weHaveIngredients:(NSSet*)requiredIngredients inCupboard:(NSSet*)foodCupboard
{
  BOOL result = YES;
  if (!requiredIngredients isSubsetOfSet:foodCupboard)
       result = NO;
  return result;
}
你可以像这样使用它

NSString* alertmessage = "Sorry we can't make a cake, not enough ingredients"
if ([self weHaveIngredients:recipeIngredients inCupboard:foodCupboard])
    alertmessage = "Start baking"

UIAlertView *alert =
    [[UIAlertView alloc] initWithTitle: @"Ingredients checked"
                         message: alertMessage
                         delegate: self
                         cancelButtonTitle: @"OK"
                         otherButtonTitles: nil];
[alert show];
另一个问题是将数据转换为两个数组的形式。在将数组放入tableView时,您必须已经从API中获取了一个数组。我同样假设您知道如何从(存储的?)plist获取数组,因为您一定是以某种方式创建了plist。如果您有具体的数据转换问题,我建议您提出更具体的问题


所有这些都不能解决您是否有足够的每种成分的问题—要正确地做到这一点,您需要某种数据库。

在Xcode中这样做会有困难。也许可以在Objective-C中使用。顺便问一下,你有什么问题吗?