【问题标题】:Working with multiple objects in NSArray在 NSArray 中处理多个对象
【发布时间】:2016-03-03 21:38:34
【问题描述】:

有一个包含事物列表的表格视图。用户可以在此表中选择多行。我将每个存储在一个数组中。

然后我想遍历该数组以获取它自己的字符串中的每个项目,我可以将其设置为一个键。

这是我尝试过的:

for (NSString *str in self.myArray) {
        if ([str isEqual:@"Blah"]) {
            self.blahString = str;
        } else {
            self.blahString = @"";
        }

        if ([str isEqual:@"Blah Blah"]) {
            self.blahblahString = str;
        } else {
            self.blahblahString = @"";
        }

        if ([str isEqual:@"Blah Blah Blah"]) {
            self.blahblahblahString = str;
        } else {
            self.blahblahblahString = @"";
        }
}

if (self.myArray.count == 0) {
     [self.answersToPass setObject:@"" forKey:@"Blah"];
     [self.answersToPass setObject:@"" forKey:@"Blah Blah"];
     [self.answersToPass setObject:@"" forKey:@"Blah Blah Blah"];
} else {
     [self.answersToPass setObject:self.blahString forKey:@"Blah"];
     [self.answersToPass setObject:self.blahblahString forKey:@"Blah Blah"];
     [self.answersToPass setObject:self.blahblahblahString forKey:@"Blah Blah Blah"];
}

这里的目标是如果用户没有选择任何东西,那么只需将每个 objectForKey 设置为一个空字符串,否则将每个字符串拉出并匹配到它的右键。

编辑:

我相信我已经解决了我的问题。我把上面的代码完全划掉了。

我发现了一个“操作顺序”错误。完全是我的错。应该更仔细地逐行查看我的代码。

如果我再次遇到任何问题,我会在这里更新帖子。

感谢大家的意见和帮助。对于我的问题不够彻底,我深表歉意。

【问题讨论】:

  • 当循环结束时,字符串当然会包含数组中的最后一个值。如果要拉出每个字符串,则需要存储字符串以进行 evrry 迭代。但是你想做什么?
  • 我需要存储每个字符串。这些与需要发送到数据库的答案有关。每次如何存储的任何提示都会有所帮助。我试过的一切都没有奏效。
  • 你能展示你的尝试吗?你的意思是,你想为每次迭代将字符串存储在数据库中?
  • 如果您已经拥有数组中的数据 - self.myArray - 那么它已经可以在应用程序中使用。如果您需要将每个字符串持久保存在数据存储中,请查看有关 CoreData 或 Realm 的众多教程之一
  • 发布一个完整的例子,展示你的输入和你想要得到的输出。你的问题现在没有任何意义。

标签: ios objective-c arrays nsarray


【解决方案1】:

你的问题措辞不是很清楚,所以我会尽力而为,但我不确定你到底想要什么。

1) 听起来您一直在检查用户是否选择了某些内容。为什么?这是一个可怕的想法。相反,add a responder to change stuff 当用户确实选择了某些东西时。

2) 这种手动设置不是很好 - 如果有一天您想要拥有 500 个不同的项目怎么办?是否要手动输入每个 if 语句?

尝试更多类似的东西。

for (NSString *string in self.myArray)
{
    if (self.answersToPass[string])
        [self.answersToPass setObject: string forKey:string];
    for (id key in self.answersToPass)
        if (key isEqualToString:(string))
            [self.answersToPass setObject: string forKey:key];
        else [self.answersToPass setObject: "" forKey:key];
}

请注意,以上内容未经测试,因此您可能必须使用我的 obj c 表示法或其他东西修复一些错误,但它应该显示正确的想法。

我会注意到,字符串相互相等的字典的这种基本结构听起来很傻。为什么要存储一个相等或值为空的键和值,然后每次都检查?只保存一个布尔数组不是更容易吗?还是字符串到布尔值的映射?

【讨论】:

  • 上面发布的代码在用户点击按钮时运行。我正在检查何时选择一个单元格来检查和取消选中它。不过,有些键与单元格标题中列出的键有些不同。至于最后一点,我可以尝试推动他们进行修改,但我没有编写任何服务器端逻辑。
  • *** 由于未捕获的异常 'NSGenericException' 导致应用程序终止,原因:'*** Collection <__nsdictionarym:> 在枚举时发生了变异。'
  • 您可能必须制作副本,编辑副本,然后将原件挂起来作为副本。关键是逻辑而不是代码本身。我有更简单的方法来检查和取消选中单元格......
【解决方案2】:

您最好将数据结构(例如 NSMutableArray 或 NSMutableDictionary)定义为属性,并将 str 存储到其中,以便您以后可以访问它们。

@property (nonatomic, strong) NSMutableArray *array; 
for (NSString *str in self.myArray) {
[array addObject str];
}

【讨论】:

    猜你喜欢
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多