Помогите с Core Data Swift 2.0
Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті
Привет помогите, не могу уже вторую неделю осилить момент в Core Data Swift 2.0, создаю объекты они успешно сохраняются при первом запуске, но если запускаю приложение снова и снова, то объекты в Core Data дублируются, дублируются и так до бесконечности, в моем tableview начинается лажа)
Вот мой код, очень прошу помощи, хочу двигаться дальше..., но на этом этапе завис..., я понимаю, что нужно как то перед сохранением проверить есть ли данный объект уже или его нет
//Стартуем
import UIKit import SwiftyJSON import CoreData class MainTableViewController: UITableViewController { @IBOutlet var MainTableView: UITableView!
//Создаю массив для типизации и хранения данных Core Data
var someNewsCore = [FNews]()
//Устанавливаю номер страницы для загрузки данных с помощью SwiftyJSON
let pageNumber = "1"
//Используем стандартные процедуры для подготовки использования Core Data
let moContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext override func viewDidLoad() { super.viewDidLoad() let urlString = "http://kinodrive.com/json/news.php?page=" + pageNumber
//Получаем JSON
if let url = NSURL(string: urlString) { if let data = try? NSData(contentsOfURL: url, options: []) { let json = JSON(data: data) for value in json.dictionaryValue.keys { if let idJson = json[value]["id"].string { let titleJson = json[value]["title"].string let dateJson = json[value]["date"].string let viewsJson = json[value]["views"].string let imageJson = json[value]["image"].string
//Типизируем данные перед сохранением в Core Data
let entity = NSEntityDescription.entityForName("FNews", inManagedObjectContext: moContext) let fnews2 = FNews(entity: entity!, insertIntoManagedObjectContext: moContext) fnews2.title = titleJson fnews2.id = idJson fnews2.view = viewsJson fnews2.data = dateJson let imagePath = UIImage(data: NSData(contentsOfURL: NSURL(string: imageJson!)!)!) let imageData = UIImageJPEGRepresentation(imagePath!, 1) fnews2.image = imageData
//Наверно тут САМЫЙ важный момент вопроса, каждый раз при запуске приложения, данные сохраняются в Core Data, снова и снова.
Как сделать, чтобы они проверялись, есть ли запись с таким значением или нет? Может хотя бы перезаписывались, но не дублировались...
do { try moContext.save() } catch { fatalError("Failure to save context: \(error)") } tableView.reloadData() } } } } }
//Получаем данные из Core Data
override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } override func viewDidAppear(animated: Bool) { let request = NSFetchRequest(entityName: "FNews") let sortArray = NSSortDescriptor(key: "id", ascending: false) request.sortDescriptors = [sortArray] do { let core = try moContext.executeFetchRequest(request) as! [FNews] someNewsCore = core } catch { fatalError("Failed to fetch person: \(error)") } self.MainTableView.reloadData() } // MARK: - Table view data source
//Присваиваем данные нашим label и imageView
override func numberOfSectionsInTableView(tableView: UITableView) -> Int { // #warning Incomplete implementation, return the number of sections return 1 } override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { // #warning Incomplete implementation, return the number of rows return someNewsCore.count } override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("mainCell", forIndexPath: indexPath) as! MainTableViewCell let fnews = someNewsCore[indexPath.row] cell.mainTitleNews.text = fnews.title cell.mainDateNews.text = fnews.data cell.mainViewNews.text = fnews.view cell.mainImageNews.image = UIImage(data: fnews.image!) cell.mainImageNews.layer.cornerRadius = cell.mainImageNews.frame.size.height / 2 cell.mainImageNews.clipsToBounds = true return cell }
13 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів