Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Swift代码正在向核心数据中添加不需要的零数据。

Swift代码正在向核心数据中添加不需要的零数据。
EN

Stack Overflow用户
提问于 2016-10-27 16:44:15
回答 1查看 306关注 0票数 1

我正在尝试包括提醒和添加到用户日历到我的应用程序。然而,我遇到了一个问题,当我试图加载保存在核心数据中的数据时,我将得到零。加载几次后,我只会得到零数据,但每次重新加载应用程序时,它都会增加。

addReminderToCalendar函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*
 *
 *This function adds the reminder to the devices calendar and to the devices local storage
 *
 */
func addReminderToCalendar(newReminder : Reminder){
    print("adding reminder :" + newReminder.reminderName)
    /*print(newReminder.reminderDescription)
     print(newReminder.reminderDate)
     print(newReminder.reminderID)
     print(newReminder.reminderName)*/
    if(newReminder.reminderID != nil && newReminder.reminderDate != nil && newReminder.reminderDescription != nil && newReminder.reminderName != nil){
        //print("Adding Reminder to Calendar")
        let appDelegate = UIApplication.shared.delegate as! AppDelegate!
        let managedContext = appDelegate?.managedObjectContext
        let entity =  NSEntityDescription.entity(forEntityName: "Reminders", in:managedContext!)
        let reminderDB = NSManagedObject(entity: entity!, insertInto: managedContext)
        //  print("Reminder ID :" + String(newReminder.reminderID))
        if(checkForReminder(newReminder) == -1){//Checking that the reminder is not already added
            print("addReminderToCalendar :")
            print(newReminder.reminderID)
            reminderDB.setValue(newReminder.reminderID, forKey: "reminderID")
            reminderDB.setValue(newReminder.reminderName, forKey: "reminderName")
            reminderDB.setValue(newReminder.reminderDescription, forKey: "reminderDescription")
            reminderDB.setValue(newReminder.reminderDate, forKey: "reminderDate")
            reminders.append(newReminder)
        }
        if (managedContext?.hasChanges)! {
            do {
                try managedContext?.save()
            } catch {
                //print(newReminder)
                NSLog("Error Here")
            }
        }
    }else{
        print("The reminder to be added was nil")
    }
}

loadReminder函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    /*
 * This function loads the reminders that have been stored in the device
 */
func loadReminders(){

    let appDelegate = UIApplication.shared.delegate as! AppDelegate

    let managedContext = appDelegate.managedObjectContext

    let fetchRequest:NSFetchRequest<NSFetchRequestResult> = NSFetchRequest(entityName: "Reminders")

    let results = try? managedContext.fetch(fetchRequest)

    storedReminders = results as! [NSManagedObject]
    print(storedReminders.count)
    //print(storedReminders[0].value(forKey: "reminderID"))
    if (storedReminders.count > 0){
        for index in 0 ... storedReminders.count - 1{
            print("Loading reminder with ID : ")
            print(storedReminders[index].value(forKey: "reminderID"))
            print("Loading reminder with Name : ")
            print(storedReminders[index].value(forKey: "reminderName"))

            if(storedReminders[index].value(forKey: "reminderID") != nil && storedReminders[index].value(forKey: "reminderName") != nil && storedReminders[index].value(forKey: "reminderDescription") != nil && storedReminders[index].value(forKey: "reminderDate") != nil){ //checking that the values are not null
                let loadedReminder = Reminder()
                loadedReminder.reminderID = storedReminders[index].value(forKey: "reminderID") as! Double
                loadedReminder.reminderName = storedReminders[index].value(forKey: "reminderName") as! String
                loadedReminder.reminderDescription = storedReminders[index].value(forKey: "reminderDescription") as! String
                loadedReminder.reminderDate = (storedReminders[index].value(forKey: "reminderDate") as! NSDate) as Date!
                reminders.append(loadedReminder)
            }
        }
    }
}

提醒类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import Foundation
import UIKit
import CoreData

class Reminder :UICollectionViewCell{

   var reminderDate: Date!
   var reminderDescription: String!
   var reminderID: Double!
   var reminderName: String!

}

编辑--我在加载提醒中添加了以下几行,这是为了阻止核心数据中填充零值。}{//删除此提醒器managedContext.delete(storedRemindersindex as NSManagedObject) print(“已删除的数据”)}因此,我的loadReminders函数现在如下所示

/* *此函数加载存储在设备*/ func loadReminders(){中的提醒程序。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let appDelegate = UIApplication.shared.delegate as! AppDelegate

let managedContext = appDelegate.managedObjectContext

let fetchRequest:NSFetchRequest<NSFetchRequestResult> = NSFetchRequest(entityName: "Reminders")

let results = try? managedContext.fetch(fetchRequest)

storedReminders = results as! [NSManagedObject]
print(storedReminders.count)
//print(storedReminders[0].value(forKey: "reminderID"))
if (storedReminders.count > 0){
    for index in 0 ... storedReminders.count - 1{
        print("Loading reminder with ID : ")
        print(storedReminders[index].value(forKey: "reminderID"))
        print("Loading reminder with Name : ")
        print(storedReminders[index].value(forKey: "reminderName"))

        if(storedReminders[index].value(forKey: "reminderID") != nil && storedReminders[index].value(forKey: "reminderName") != nil && storedReminders[index].value(forKey: "reminderDescription") != nil && storedReminders[index].value(forKey: "reminderDate") != nil){ //checking that the values are not null
            let loadedReminder = Reminder()
            loadedReminder.reminderID = storedReminders[index].value(forKey: "reminderID") as! Double
            loadedReminder.reminderName = storedReminders[index].value(forKey: "reminderName") as! String
            loadedReminder.reminderDescription = storedReminders[index].value(forKey: "reminderDescription") as! String
            loadedReminder.reminderDate = (storedReminders[index].value(forKey: "reminderDate") as! NSDate) as Date!
            reminders.append(loadedReminder)
        }else{
                //delete this reminder
                managedContext.delete(storedReminders[index] as NSManagedObject)
                print("deleted data")
            }
    }
}

}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-28 05:23:34

在这里,您将创建一个新的Reminders实例并将其添加到NSManagedObjectContext

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let entity =  NSEntityDescription.entity(forEntityName: "Reminders", in:managedContext!)
let reminderDB = NSManagedObject(entity: entity!, insertInto: managedContext)

然后检查它是否已经添加了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if(checkForReminder(newReminder) == -1)

我认为问题就在这里。您已经将Reminders实例添加到上下文中了!所以managedContext?.hasChanges将是true

对上下文有一些更改,这些Reminders将与所有实体属性一起保存,并带有它们的默认值。我猜它们默认为nil

这应该可以修复它,尽管你的代码中有些部分我看不见,所以,请稍加考虑.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func addReminderToCalendar(newReminder: Reminder) {
    if(newReminder.reminderID != nil && newReminder.reminderDate != nil && newReminder.reminderDescription != nil && newReminder.reminderName != nil) {
        if(checkForReminder(newReminder) == -1) {
            let appDelegate = UIApplication.shared.delegate as! AppDelegate!
            let managedContext = appDelegate?.managedObjectContext
            let entity =  NSEntityDescription.entity(forEntityName: "Reminders", in:managedContext!)
            let reminderDB = NSManagedObject(entity: entity!, insertInto: managedContext)
            reminderDB.setValue(newReminder.reminderID, forKey: "reminderID")
            reminderDB.setValue(newReminder.reminderName, forKey: "reminderName")
            reminderDB.setValue(newReminder.reminderDescription, forKey: "reminderDescription")
            reminderDB.setValue(newReminder.reminderDate, forKey: "reminderDate")
            reminders.append(newReminder)

            if (managedContext?.hasChanges)! {
                do {
                    try managedContext?.save()
                } catch {
                    NSLog("Error Here")
                }
            }
        }
    } else {
        print("The reminder to be added was nil")
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40296310

复制
相关文章
设置和获取HTTP标头
%Net.HttpRequest的以下每个属性都包含具有相应名称的HTTP标头的值。如果不设置这些属性,则会自动计算它们:
用户7741497
2022/06/09
2.5K0
查询oracle视图创建语句及如何向视图中插入数据[通俗易懂]
今天由于要测试接口,需要在数据库中插入一些测试数据。但当我在向数据库插入数据的时候,发现接口查询的是视图并不是表,所以将遇到的问题在这里记录一下。
全栈程序员站长
2022/07/28
4.3K0
查询oracle视图创建语句及如何向视图中插入数据[通俗易懂]
我又踩坑了!如何为HttpClient请求设置Content-Type标头?
平台显示 :签名校验失败, 排查到平台收到的Post Payload并非预期,阅读本文,解锁正确使用Content-Type标头的姿势。
有态度的马甲
2020/10/10
8.4K0
我又踩坑了!如何为HttpClient请求设置Content-Type标头?
通过 HTTP 标头的 XSS
在某些情况下,在应用程序的一个 HTTP 标头中传递的信息未正确清理,并在请求页面的某处或另一端输出,从而导致 XSS 情况。
Khan安全团队
2022/03/09
2.1K0
通过主机标头的 XSS
在 IE 中处理重定向时有一个有趣的错误,它可以将任意字符插入到 Host 标头中。假设您有以下 http 响应:
Khan安全团队
2022/01/11
1.6K0
常见的HTTP标头介绍
在网络爬虫的实践过程中会遇到诸多挑战,被屏蔽是最令人头疼的一个。幸好,有许多技术可以帮助您免受IP屏蔽带来的影响,这其中,HTTP标头(HTTP Headers)的使用和优化是最有效的方法之一,但它往往也是最被大家低估的方法之一。
用户7850017
2022/05/07
1.1K0
常见的HTTP标头介绍
MyBatis处理动态设置表名
在MyBatis中,我们可以通过动态SQL语句来处理动态设置表名的需求。例如,在某些情况下,我们需要在查询或更新操作中动态指定表名,例如根据用户的角色动态切换到不同的表中进行操作。
堕落飞鸟
2023/05/15
2.4K0
matplotlib画图中的各种设置
原文出处:https://www.jianshu.com/p/8006d74ac9e7
SL_World
2021/09/18
2.8K0
django 视图中使用多线程
如果你需要在django视图中使用多线程执行其他任务,然后发现执行完后并没有达到你逾期的执行结果,
kirin
2021/04/09
2K0
HANA计算视图中的RANK使用方法
2、当我们必须从源集中的多个记录或前N个或后N个记录中选择最新记录时,这将非常有用。
matinal
2020/11/27
1.6K0
【DB笔试面试541】在Oracle中,如何查找存储过程或视图中引用了哪些基表?
可以查询DBA_DEPENDENCIES视图,该视图记录了对象与对象之间的依赖关系,NAME列为当前对象,而REFERENCED_NAME为其依赖的基对象。所以,该视图也可以查询某个表被哪些对象所引用,从而知道该表是否可以被删除。
AiDBA宝典
2019/09/29
2.1K0
SpringDataJPA笔记(10)-动态设置表名
在实际使用中可能会遇到需要动态设置表名的情况,特别是通常在后台管理系统里面,总有一些相似的功能需要抽象出来写一些公共的方法,以减少代码开发量,降低重复劳动
yingzi_code
2020/03/24
2.2K0
SpringDataJPA笔记(10)-动态设置表名
在 SwiftUI 视图中打开 URL 的若干方法
本文将介绍在 SwiftUI 视图中打开 URL 的若干种方式,其他的内容还包括如何自动识别文本中的内容并为其转换为可点击链接,以及如何自定义打开 URL 前后的行为等。
东坡肘子
2022/07/28
7.8K1
在 SwiftUI 视图中打开 URL 的若干方法
【译】在列表视图中处理空值
本篇文章主要针对两类开发者。第一个是曾遇到过IllegalArgumentException: Path must not be empty问题的开发者。第二个则是当ListView使用了未被完整加载的图像,应用程序仍能正确运转的开发者们。
小鄧子
2018/08/20
1.2K0
如何正确设置CRON定时任务
相信很多人看了标题后都会纳闷:设置 CRON 定时任务有什么难的?不过请相信我,正确设置 CRON 真的不是一件简单的事情!各位看官不妨听我慢慢道来。
LA0WAN9
2021/12/14
1K0
博客站长如何正确设置SEO
提高PR就一个办法——和别的网站多多做友链,链接要越多越好,注意质量,不要选择太垃圾的网站。
老潘
2023/10/19
2540
博客站长如何正确设置SEO
如何设置Ansible AWS的动态清单
当您将Ansible与AWS结合使用时,维护清单文件将是一项繁重的任务,因为AWS经常更改IP,自动缩放实例等。但是,有一个简单的解决方案就是ansible动态清单。它基本上是一个Python脚本,当您运行ansible命令时会进行API调用以获取实例信息。这将为您提供动态清单详细信息,这些信息可以用来方便管理AWS基础架构。
JFrog杰蛙科技
2020/06/24
1.6K0
如何正确的进行数据的分库分表
如果数据多到一定程度,就需要分库分表来存储数据了,这个一定程度的判断也比较难,总体而言,
jerryteng
2021/12/21
1.9K0
如何正确的进行数据的分库分表
点击加载更多

相似问题

如何取消表视图中的表视图节标头

12

设置RecyclerView标头视图中的问题

18

列表视图中的标头

12

在网格视图中冻结标头时,正确设置页眉宽度和列

216

快速访问表视图中的每个标头和控件

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文