我发送包含content-available = 1的每个通知,这意味着每次通知都在dIDReceiveRemoteNotifications中工作,并且当用户点击或不通知时保存静默通知.因此,如果我的应用程序在后台,将有两个记录插入.
第一个条件是当应用程序处于后台时发出通知,由于content-available = 1而调用dIDReceiveRemoteNotification并插入一条记录.
因此,第二个条件是如果用户在通知中心内点击通知,那么该方法再次接收RemoteNotification并插入相同的记录.因此,重复问题.
func application(application: UIApplication,dIDReceiveRemoteNotification userInfo: [NSObject : AnyObject],fetchCompletionHandler handler: (UIBackgroundFetchResult) -> VoID) { if let aps = userInfo["aps"] as? NSDictionary{ if let alert = aps["alert"] as? NSDictionary{ if let mbody = alert["body"] as? String{ print("Message Body : \(body)") body = mbody } if let mTitle = alert["Title"] as? String{ print("Message Title : \(Title)") Title = mTitle } } } let newNotification = NotificationList() newNotification.Title = Title newNotification.body = body onesignalHelper.insertOnesignalNotification(newNotification) NSNotificationCenter.defaultCenter().postNotificationname("refreshNotification",object: nil) handler(UIBackgroundFetchResult.NewData)}
这是我的领域代码
func insertOnesignalNotification(List: NotificationList){ // Insert the new List object try! realm.write { realm.add(List) } // Iterate through all List objects,and delete the earlIEst ones // until the number of objects is back to 50 let sortedLists = realm.objects(NotificationList).sorted("createdAt") while sortedLists.count > totalMessage { let first = sortedLists.first try! realm.write { realm.delete(first!) } }}
这是我的领域对象
import RealmSwiftclass NotificationList: Object { dynamic var Title = "" dynamic var body = "" dynamic var createdAt = NSDate() let notifications = List<Notification>()// Specify propertIEs to ignore (Realm won't persist these)// overrIDe static func ignoredPropertIEs() -> [String] {// return []// }}
那么,在我插入新记录之前,有没有办法在领域保护重复记录插入.我是realm swift的新手.有什么帮助吗?
解决方法 您的NotificationList需要主键.将主键设置为您的对象,如下所示:
class NotificationList: Object { dynamic var Title = "" dynamic var body = "" dynamic var createdAt = NSDate() dynamic var ID = 0 let notifications = List<Notification>() overrIDe static func primaryKey() -> String? { return "ID" }}
然后使用add(_:update:)
添加对象:
realm.add(newNotification,update: true)
如果ID存在,它将更新数据.
总结以上是内存溢出为你收集整理的ios – 如何保护领域中的重复记录插入全部内容,希望文章能够帮你解决ios – 如何保护领域中的重复记录插入所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)