- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我一直在尝试使用 CoreData 和 Swift 在关系中添加对象。我很茫然,我不明白为什么我的代码不起作用。我正在尝试向“团队”添加“事件”。我找不到已接受的答案(应该有效)和我的代码(无效)之间的区别。
Teams.swift:
import Foundation
import CoreData
class Teams: NSManagedObject {
@NSManaged var teamName: String
@NSManaged var matches: NSSet
}
extension Teams {
func addEventToTeam(event:Event) {
//self.mutableSetValueForKeyPath("matches").addObject(event)
var matchez: NSMutableSet
matchez = self.mutableSetValueForKey("matches")
matchez.addObject(event)
//var manyRelation = self.valueForKeyPath("matches") as NSMutableSet
//manyRelation.addObject(event)
}
func getTeamName() -> String {
return teamName
}
}
调用代码(从配置 View ):
import UIKit
import CoreData
class DetailViewController: UIViewController, NSFetchedResultsControllerDelegate {
var managedObjectContext: NSManagedObjectContext? = nil
@IBOutlet weak var detailDescriptionLabel: UILabel!
var detailItem: AnyObject? {
didSet {
// Update the view.
self.configureView()
}
}
func configureView() {
// Update the user interface for the detail item.
if let detail: Event = (self.detailItem as? Event) {
//if let detail: AnyObject = self.detailItem {
if let label = self.detailDescriptionLabel {
label.text = detail.valueForKey("timeStamp").description
self.insertNewObject(self);
label.text = String(detail.getNumberOfTeams())
//detail.getTeams().
var hej: Array<Teams>
hej = detail.getTeams()
label.text = "tjosan"
for tmpTeam : Teams in hej {
label.text = label.text + ", " + tmpTeam.getTeamName()
}
}
}
if true {
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.configureView()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
var fetchedResultsController: NSFetchedResultsController {
if _fetchedResultsController != nil {
return _fetchedResultsController!
}
let fetchRequest = NSFetchRequest()
// Edit the entity name as appropriate.
let team = NSEntityDescription.entityForName("Teams", inManagedObjectContext: self.managedObjectContext)
fetchRequest.entity = team
// Set the batch size to a suitable number.
fetchRequest.fetchBatchSize = 20
// Edit the sort key as appropriate.
let sortDescriptor = NSSortDescriptor(key: "teamName", ascending: false)
let sortDescriptors = [sortDescriptor]
fetchRequest.sortDescriptors = [sortDescriptor]
// Edit the section name key path and cache name if appropriate.
// nil for section name key path means "no sections".
let aFetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.managedObjectContext, sectionNameKeyPath: nil, cacheName: "Master")
aFetchedResultsController.delegate = self
_fetchedResultsController = aFetchedResultsController
var error: NSError? = nil
if !_fetchedResultsController!.performFetch(&error) {
// Replace this implementation with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
//println("Unresolved error \(error), \(error.userInfo)")
abort()
}
return _fetchedResultsController!
}
var _fetchedResultsController: NSFetchedResultsController? = nil
func insertNewObject(sender: AnyObject) {
let context = self.fetchedResultsController.managedObjectContext
let team = self.fetchedResultsController.fetchRequest.entity
let newManagedObject = NSEntityDescription.insertNewObjectForEntityForName(team.name, inManagedObjectContext: context) as Teams
// If appropriate, configure the new managed object.
// Normally you should use accessor methods, but using KVC here avoids the need to add a custom class to the template.
newManagedObject.setValue("Lagur Namnurk", forKey: "teamName")
newManagedObject.addEventToTeam(self.detailItem as Event)
// Save the context.
var error: NSError? = nil
if !context.save(&error) {
// Replace this implementation with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
//println("Unresolved error \(error), \(error.userInfo)")
abort()
}
}
}
错误信息:
2014-08-13 18:38:46.651 Score Calculator 2[10538:829319] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSSet intersectsSet:]: set argument is not an NSSet'
*** First throw call stack:
(
0 CoreFoundation 0x00000001028a53e5 __exceptionPreprocess + 165
1 libobjc.A.dylib 0x00000001043b8967 objc_exception_throw + 45
2 CoreFoundation 0x000000010280fc6c -[NSSet intersectsSet:] + 940
3 Foundation 0x0000000102d0c4a6 NSKeyValueWillChangeBySetMutation + 156
4 Foundation 0x0000000102c804fa NSKeyValueWillChange + 386
5 Foundation 0x0000000102d0c3fb -[NSObject(NSKeyValueObserverNotification) willChangeValueForKey:withSetMutation:usingObjects:] + 310
6 CoreData 0x00000001024178d7 -[NSManagedObject(_NSInternalMethods) _includeObject:intoPropertyWithKey:andIndex:] + 551
7 CoreData 0x0000000102418294 -[NSManagedObject(_NSInternalMethods) _maintainInverseRelationship:forProperty:forChange:onSet:] + 276
8 CoreData 0x0000000102416ef2 -[NSManagedObject(_NSInternalMethods) _didChangeValue:forRelationship:named:withInverse:] + 562
9 Foundation 0x0000000102c835d6 NSKeyValueNotifyObserver + 356
10 Foundation 0x0000000102c827fd NSKeyValueDidChange + 466
11 Foundation 0x0000000102d0c7ee -[NSObject(NSKeyValueObserverNotification) didChangeValueForKey:withSetMutation:usingObjects:] + 118
12 CoreData 0x00000001024180b0 -[NSManagedObject didChangeValueForKey:withSetMutation:usingObjects:] + 80
13 CoreData 0x000000010242fa11 -[_NSNotifyingWrapperMutableSet addObject:] + 161
编辑:一些澄清。 Teams 和 Event 具有多对多、无序的关系。
最佳答案
是的!!我找到了答案!
我在类 Events.swift 中创建了一个新函数(关系的另一端)。
我写了下面的代码:
import Foundation
import CoreData
class Event: NSManagedObject {
@NSManaged var timeStamp: NSDate
@NSManaged var teams: NSSet
}
extension Event {
func addTeamToEvent(team:Teams) {
var teamz = self.mutableSetValueForKey("teams")
teamz.addObject(team)
}
func getNumberOfTeams() -> Int {
return self.teams.count;
}
func getTeams() -> [Teams] {
var tmpsak: [Teams]
tmpsak = self.teams.allObjects as [Teams]
tmpsak = self.teams.allObjects as [Teams]
return tmpsak
}
}
我认为这无关紧要。但是,将 getTeams 重命名为 getTeamsAsArray 可以解决该问题。我猜测 CoreData 在填充关系的另一端时使用了一个名为 getTeams() 的内置函数(因为另一个类称为 Teams)。我不小心覆盖(?)它,导致它失败。
感谢您的建议,希望对其他人有所帮助!
在某种程度上相关的注释中,几年前发现了一个具有类似症状的错误(并且似乎仍然存在),当使用 ordered many-to 时,它会在自动生成的代码中显示出来-许多关系。
关于ios - Swift 和 CoreData,关系问题 (NSSet) - [NSSet intersectsSet :]: set argument is not an NSSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25291760/
按照我目前安排代码的方式,下一行将为各种托管对象上下文运行。一些获取的实体将具有“complededDate”,而其他实体将没有“completedDate”属性。 let task = retrie
我在 import CoreData 的应用程序委托(delegate)中遇到此错误。据我所知,这是因为我将一个项目命名为 coreData。但是我更改了项目的名称,然后将其删除,并且删除了 /Lib
我想将记录保存在数组中并从 CoreData 中删除它们。我尝试过使用 NSCopying 但似乎 copyWithZone 不适用于 NSManagedObject。我真的很困惑,任何帮助将不胜感激
有时我的项目中很少会出现错误(比如每第 100 个请求)。我的一些 CoreData 的请求有 data:我无法使用该数据。我真的不明白为什么会发生这种情况以及如何防止这种行为。 错误数据输出示例:
如果您使用 Xcode 创建一个新项目并告诉它在您创建项目时创建一个 CoreData 模板,则您不需要 #import 在使用 ManagedObjects 的类中。 我已经将 Core Data
我对 SQLCipher 数据库加密和 CoreData 有疑问:当我将持久存储协调器与 SQLCipher 一起使用时,它总是在第一次应用程序重新启动后因一对多关系故障而崩溃。因此,当我第一次启动该
我有一个想要添加 iCloud 支持的应用程序。此应用程序从服务器加载数据,并将数据存储在 CoreData 中,以便 NSFetchedResultsController可以管理UITableVie
我正在从 coredata 表 STUDENT 中获取数据,并使用 Array 在 tableview 中显示所有学生姓名。在选择任何一个学生姓名后(点击 tableViewCell),它会从另一个表
我在构建过程中收到以下错误。 “API 滥用:尝试序列化非拥有协调器上的存储访问(PSC = 0x7fb5ae208890,存储 PSC = 0x0)CoreData 为什么我的应用程序会出现 Cor
当将 iOS 6.0.1 上的 Core Data 托管对象上下文保存到 SQLite 存储时,我遇到了一个奇怪的“CoreData 不支持持久的跨存储关系”异常。它涉及模型中 Quotes 和 Ab
我的应用程序有两个选项卡栏...每个选项卡栏都将用户带到一个向他显示项目列表的 TableView Controller 。第一个 View 允许用户在数据库中记录条目。另一个选项卡/ View 从数
Objective-C (OC) 中使用 Core Data 是iOS应用开发中管理模型层对象的一种有效工具。Core Data 使用 ORM (对象关系映射) 技术来抽象化和管理数据。这不仅可以节省
我有一个名为visitDate的coredata属性 我想使用单独的选择器相互独立地设置日期和时间。 我意识到,当我设置时间时,我需要获取visitDate的现有日期、月份和年份,但只从NSDateP
我有这个代码示例演示如何更新核心数据中的对象,但是我遇到了一个小问题: // Retrieve the context if (managedObjectContext == nil) { m
我在 CoreData 中有一个包含整数值的列。在从中检索结果时,我希望将列值减去一个数字。 类似于:columnValue - someNumber(此数字由用户输入) 我知道我可能必须为此使用 N
有没有办法将 CoreData 模型文件(即实体描述:*.xcdatamodeld)导出到另一个项目。因为重新创建所有实体很无聊:-) 最佳答案 是的,只需将模型文件本身添加/复制到新项目中,就像任何
我使用核心数据编写了 iPhone 应用程序。当我在模拟器中运行应用程序时,它崩溃并出现以下错误: 2010-02-12 17:24:22.359 CrData[46122:4503] Unresol
我是 CoreData 的新手,在我的 iPhone 应用程序中,我想知道如何保存一些文本,然后将其重新加载。但诀窍是,当 UIDatePicker 中的日期与我相同时加载它。像日历一样保存它。 更新
我正在寻找在 CoreData 中编写一些基本查询的方法,但文档中没有示例。以下是我的查询: 我有一个费用对象,它有一个费用金额字段。 费用可以链接到 ExpenseCategory 对象。 Expe
我在标题中使用“单例”一词时可能存在术语不正确的情况。我现在正在寻找一种好的技术。我有一个名为 user 的实体,它存储用户登录的数据,例如用于发出服务器请求的 session key 。我只希望这些
我是一名优秀的程序员,十分优秀!