2016-03-14 2 views
1

Каждый раз, когда я запускаю приложение, а затем повторно запускаю его, он сохраняет те же элементы в NSUserDefaults, даже если он уже существует.Дублирование элементов уже в массиве

Я попытался исправить это с помощью кода contains, но он не сработал.

Что мне не хватает?

for days in results! { 
     let nD = DayClass() 
     nD.dayOfTheWeek = days[“D”] as! String 
     let defaults = NSUserDefaults.standardUserDefaults() 
      if var existingArr = defaults.arrayForKey("D") as? [String] { 
       if existingArr.contains(days["D"] as! String) == false { 
        existingArr.append(nd.dayOfTheWeek) 
       } 
      } else { 
       defaults.setObject([nD.dayOfTheWeek], forKey: "D") 
      } 
     } 
+0

Можете ли вы дать дополнительную информацию о том, что вы пытаетесь сделать с массивом. – Cing

+0

Victor, вы не должны использовать defaults.synchronize(). «Так что да, длинный рассказ, не используйте синхронизацию в iOS 8 и более поздних версиях». -http: //www.codingexplorer.com/nsuserdefaults-a-swift-introduction/ Также вы должны попробовать только определить значения по умолчанию (пусть defaults = ...) один раз, в верхней части вашего проекта. – owlswipe

+0

@JohnRamos ok спасибо! Я изменил это, и он все еще делает то же самое. Но, возможно, вы больше смотрели на советы по форматированию и т. Д., Которые благодарят. – victorpulak

ответ

0

Каждый раз, когда я запустить приложение, а затем снова запустить его, он сохраняет те же предметы в NSUserDefaults, даже если он уже есть.

Да, потому что это именно то, что делает ваш код:

defaults.setObject(existingArr, forKey: "D") 

Но что existingArr? Это по умолчанию, вы только нагруженные раньше:

if var existingArr = NSUserDefaults.standardUserDefaults().arrayForKey("D") as? [String] 

Так что же происходит, что, когда вы входите в .contains ветку, вы всегда делаете ту же операцию: вы сохраните существующий массив.

В отличие от вашего комментария в коде, вы не добавляете ничего к любому массиву в этом блоке, вы сохраняете существующий.

+0

Спасибо за комментарий. Я думал, 'если var existingArr = NSUserDefaults.standardUserDefaults(). ArrayForKey (" D ")' будет устанавливать массив элементов, которые у меня есть по умолчанию, тогда 'if existingArr.contains (nD.dayOfTheWeek) == false {' будет проверять, есть ли у меня уже этот день недели, и если нет, то он добавит его. Так вы говорите, что 'defaults.setObject (existingArr, forKey:" D ")' является неправильным кодом, а затем я обновил свой код до 'append' в существующий массив, если это то, что вы говорите? Надеюсь, теперь это ясно. Благодаря! – victorpulak