Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.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 如何保存多个按钮选择?_Ios_Swift - Fatal编程技术网

Ios 如何保存多个按钮选择?

Ios 如何保存多个按钮选择?,ios,swift,Ios,Swift,我有3个代表城市的按钮,我通过属性检查器为它们分配了标记,如下所示,CityA为0,CityB为1,CityC为2 我有一个空的标签数组 var cityTag: [Int] = [] 然后在IBAction方法中 @IBAction func cityButtonPressed(_ sender: AnyObject) { guard let button = sender as? UIButton else { return } cityTag = [sender.tag!

我有3个代表城市的按钮,我通过
属性检查器
为它们分配了
标记,如下所示,
CityA为0,CityB为1,CityC为2

我有一个空的标签数组

var cityTag: [Int] = []
然后在IBAction方法中

@IBAction func cityButtonPressed(_ sender: AnyObject) {
    guard let button = sender as? UIButton else { return }
    cityTag = [sender.tag!]
}
我在类型为可转换的核心数据中有一个属性
citySelected

当我保存数据时,它只记住最后选择的城市,控制台上的输出是

Record Saved Successfully
citySelected = "(\n    2\n)";
但是下面应该是这样的,因为我选择了所有的城市

Record Saved Successfully
citySelected = "(\n    0\n    1\n    2\n)";

我缺少什么?

您应该附加到数组中

cityTag += [sender.tag!]

您应该附加到数组中

cityTag += [sender.tag!]
你不应该使用 cityTag=[sender.tag!] 你必须使用 cityTag.append(sender.tag!)

您不应该使用 cityTag=[sender.tag!] 你必须使用
cityTag.append(sender.tag!)

好像每次都在重新初始化数组。而是像这样附加或删除新元素:

if(cityTag.contains(sender.tag!)) {
     if let index = cityTag.index(of: sender.tag!) {
         cityTag.remove(at: index)
     }
} else {
     cityTag.append(sender.tag!)
}

好像每次都在重新初始化数组。而是像这样附加或删除新元素:

if(cityTag.contains(sender.tag!)) {
     if let index = cityTag.index(of: sender.tag!) {
         cityTag.remove(at: index)
     }
} else {
     cityTag.append(sender.tag!)
}

尝试使用集合而不是数组,如:

var cityTag: Set = []

@IBAction func cityButtonPressed(_ sender: AnyObject) {
    guard let button = sender as? UIButton else { return }
    if cityTag.contains(sender.tag) == false {
       cityTag.insert(sender.tag)
     }else{
     cityTag.remove(sender.tag)
     }

  }

尝试使用集合而不是数组,如:

var cityTag: Set = []

@IBAction func cityButtonPressed(_ sender: AnyObject) {
    guard let button = sender as? UIButton else { return }
    if cityTag.contains(sender.tag) == false {
       cityTag.insert(sender.tag)
     }else{
     cityTag.remove(sender.tag)
     }

  }

cityButtonPressed
方法中,将按钮的标记值分配给
数组
。这将覆盖最后一个数组分配。这意味着你第一次说
cityTag=1
,但一旦按下第二个按钮,你的
cityTag=2
。为了避免这种情况,您必须通过将所有标记添加到
cityTag
数组中来收集它们

要附加它们,请使用以下代码行:

cityTag.append(sender.tag!)

我希望这能让您清楚地了解您的问题。

在您的
cityButtonPressed
方法中,您将按钮的标记值分配给
数组。这将覆盖最后一个数组分配。这意味着你第一次说
cityTag=1
,但一旦按下第二个按钮,你的
cityTag=2
。为了避免这种情况,您必须通过将所有标记添加到
cityTag
数组中来收集它们

要附加它们,请使用以下代码行:

cityTag.append(sender.tag!)

我希望这能让你清楚地了解你的问题。

我想你也需要检查一下:

if cityTag.contains(sender.tag!) {
    //You can remove the unselected city tag from cityTag array
    print(“already exists“)
}
else{
    //Here you add selected city tag to cityTag array
    cityTag.append(sender.tag!)
}

我想你也需要检查一下:

if cityTag.contains(sender.tag!) {
    //You can remove the unselected city tag from cityTag array
    print(“already exists“)
}
else{
    //Here you add selected city tag to cityTag array
    cityTag.append(sender.tag!)
}

这有什么作用?您可以唯一地保存标签,并在再次单击按钮后删除保存所有选定城市状态的内容。您所做的是在每次单击时为一个新数组分配一个元素,这就是为什么您只有最后一个元素。这是一个完美的解决方案,但我收到一个错误,提示“无法将[Any]类型的值转换为Set”以及我的Xcode正在崩溃。这有什么作用呢?您可以唯一地保存标签,并在再次单击按钮时删除,这将保存所有选定城市的状态。您所做的是在每次单击时为一个新数组分配一个元素,这就是为什么您只有最后一个元素。这是一个完美的解决方案,但我收到一个错误,说“无法将[Any]类型的值转换为Set”,并且我的Xcode正在崩溃。这非常清楚,但应该类似于cityTag.append(sender.tag!).Thanks这很清楚,但应该像cityTag.append(sender.tag!)一样。Thanks我认为您错误地删除了我接受的答案。。干杯!:)很抱歉,我这样做是因为你的答案是“做工作”,但当我选择和取消选择城市时,它仍然记得我取消选择的城市。因此,我想保留这个问题,并为您更新了我的答案:)我认为您错误地删除了我接受的答案。。干杯!:)很抱歉,我这样做是因为你的答案是“做工作”,但当我选择和取消选择城市时,它仍然记得我取消选择的城市。因此,我想保留这个问题,并为您更新了我的答案:)很高兴为您提供帮助。干杯!:)很乐意帮忙。干杯!:)