我对这篇文章做了一些研究.但它的解决方案都不适合我.让我解释一下我做了什么:

它实际上与上述帖子非常相似.
Category.h
@class Category, Item;
@interface Category : NSManagedObject
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSOrderedSet *items;
@property (nonatomic, retain) Category *parentcategory;
@property (nonatomic, retain) NSSet *subcategories;
@end
@interface Category (CoreDataGeneratedAccessors)
- (void)insertObject:(Item *)value inItemsAtIndex:(NSUInteger)idx;
- (void)removeObjectFromItemsAtIndex:(NSUInteger)idx;
- (void)insertItems:(NSArray *)value atIndexes:(NSIndexSet *)indexes;
- (void)removeItemsAtIndexes:(NSIndexSet *)indexes;
- (void)replaceObjectInItemsAtIndex:(NSUInteger)idx withObject:(Item *)value;
- (void)replaceItemsAtIndexes:(NSIndexSet *)indexes withItems:(NSArray *)values;
- (void)addItemsObject:(Item *)value;
- (void)removeItemsObject:(Item *)value;
- (void)addItems:(NSOrderedSet *)values;
- (void)removeItems:(NSOrderedSet *)values;
- (void)addSubcategoriesObject:(Category *)value;
- (void)removeSubcategoriesObject:(Category *)value;
- (void)addSubcategories:(NSSet …Run Code Online (Sandbox Code Playgroud) 在Swift 2.0中,Core Data中的一对多关系仍然是NSOrderedSets吗?
我似乎无法适当地投射/投降以至于不会抛出错误.
有人在Swift 2.0中有一个简单的例子吗?
NSOrderedSets保存表中对象的顺序.如果使用属性为NSOrderedSet访问NSManagedObject子类实例,则它们将按顺序排列.
但是,在创建NSFetchRequest时,似乎无法使用NSSortDescriptor访问该订单.
它从原始SQLite DB中显示,该顺序存储在名为的字段中Z_FOK_<relationship name>.数据可用,但通过核心数据API似乎看不到.
有没有人知道编写NSSortDescriptor的方法,该NSSortDescriptor将与SQLite DB一起以NSOrderedSet指定的顺序返回结果?
更新
我正在制作一个健身应用程序来学习核心数据,我发现我需要让用户将每次执行的锻炼存储为锻炼日志项,并且其中应该有一系列代表该锻炼表现的锻炼日志(它包含每个举重动作以及实际练习设计的参考)。
问题是,过了一会儿我意识到我需要对这些进行排序,以便下次我想向用户展示他们的锻炼时,执行练习的顺序应该相同。
所以我检查了图像右上角的“ordered”,现在我的代码急需更新。我尝试尽可能多地阅读有关使用NSOrderedSet以及如何从核心数据中获取它们然后操作它们的内容,但我并没有真正发现对我有多大用处。(我没有 Objective-c 的经验)
例如我以前的代码是:
static func deleteWorkoutLog(_ workoutLogToDelete: WorkoutLog) {
guard let exerciseLogsToDelete = workoutLogToDelete.loggedExercises as? Set<ExerciseLog> else {
print("error unwrapping logged exercises in deleteWorkoutLog")
return
}
Run Code Online (Sandbox Code Playgroud)
我收到错误: .../DatabaseFacade.swift:84:77: Cast from 'NSOrderedSet?' 不相关的类型“设置”总是失败
所以我学到的关于集合和核心数据的知识似乎不再适用。
我远不是编程专家,但我非常渴望学习如何访问实例loggedExercises。
太长了;有没有办法将 NSOrderedSet 转换为我可以使用的东西?我们通常如何使用核心数据中的 NSManagedSets ?我们是否将它们转换为数组或可变集?我非常感谢一个或两个关于如何开始检索和使用这些有序集的示例!
谢谢
我正在尝试使用 CoreData 和 SwiftUI 并有两个实体;狗与行。Dog 之间是一对多的关系
public class Dog: NSManagedObject, Identifiable {
@NSManaged public var name: String?
@NSManaged public var walks: NSOrderedSet?
}
Run Code Online (Sandbox Code Playgroud)
和步行
public class Walk: NSManagedObject, Identifiable {
@NSManaged public var date: Date?
@NSManaged public var dog: Dog?
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是在列表中显示所选狗的所有散步。下面的WalksView将显示当前所有的步行
struct WalksView: View {
@ObservedObject var dogWalksVM:DogWalkVM
var selectedIndex:Int
var body: some View {
let currentDog = dogWalksVM.dogs[selectedIndex]
return List {
if currentDog.walks == nil {
EmptyView()
} else {
ForEach(0..<currentDog.walks!.count) { index in
Text("Date \(self.walkDate(currentDog.walks![index] as! Walk))") …Run Code Online (Sandbox Code Playgroud) 所有那些"NSOrderedSet后来被添加,因此不必与其他组件一起玩"错误让我发疯...
我有两个托管对象和它们之间有序的1:N关系,它由一个实例(或更精确的子类)支持NSOrderedSet.我想使用a来管理这种关系NSArrayController,以便从它提供的功能中获益(选择管理,内容绑定,视图绑定等NSTableView).
由于NSOrderedSet不是子类NSSet,contentSet绑定NSArrayController不适用于该关系.我发现了以下主题并试图实现那里提到的建议.
第一个建议是使用contentArray绑定和值转换器将有序集转换为数组.这个解决方案的问题是每次进行更改时重新分配内容,这不是我想要的.
在提到的线程中提供的第二个建议是使用contentArray绑定并将@array操作符应用于模型密钥路径.我已经尝试过,但是当通过添加/删除对象时根本没有触及底层关系NSArrayController.
我发现的另一个选项是使用带contentSet绑定的排序描述符.这将需要使关系无序,以便使contentSet绑定工作并引入特别用于管理订单的新属性.这还需要一个自定义排序机制来实现,它会搞砸模型.老实说,我想避免这个解决方案.
我的问题很清楚:有没有办法管理有序的核心数据关系NSArrayController?如果是这样,哪种方法尽可能少引起疼痛?
cocoa core-data nsarraycontroller cocoa-bindings nsorderedset
执行此代码时:
NSSortDescriptor *sortDescriptor = [Characteristic sortDescriptor];
[workingSet sortUsingComparator:[sortDescriptor comparator]];
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
*** -[NSMutableOrderedSet sortUsingComparator:]: comparator cannot be nil
Run Code Online (Sandbox Code Playgroud)
sortDescriptor 是非零,所以我不知道为什么这不起作用.
我可以使用下面的代码解决问题,它完美地运行:
NSSortDescriptor *sortDescriptor = [Characteristic sortDescriptor];
NSArray *workingArray = [[workingSet array] sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];
workingSet = [NSMutableOrderedSet orderedSetWithArray:workingArray];
Run Code Online (Sandbox Code Playgroud) 我有这个代码:
NSIndexSet *indexes = [anOrderedSet indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
if([self testObj: obj]) return YES;
else return NO;
}];
if(indexes == NSNotFound) NSLog(@"No objects were found passing the test");
Run Code Online (Sandbox Code Playgroud)
这导致Xcode发出警告,指出"指针和整数之间的比较('NSIndexSet*'和'int')".我完全赞同Xcode.
但是,该函数的返回值是类型NSIndexSet*,Apple文档(http://developer.apple.com/library/ios/#documentation/Foundation/Reference/NSOrderedSet_Class/Reference/Reference.html)指出:
返回值
通过谓词指定的测试的有序集中对应值的索引.如果有序集中没有对象通过测试,则返回NSNotFound .."
那么当函数的返回类型是指针时,返回NSNotFound(这是一个NSInteger)的处理是NSIndexSet什么?通过将比较更改为以下来禁止警告是否安全:
if(indexes == (NSIndexSet*) NSNotFound) NSLog(@"No objects were found passing the test");
Run Code Online (Sandbox Code Playgroud)
因为从理论上讲,索引可能是一个有效的返回NSIndexSet指针,恰好指向一个等于的内存地址NSNotFound,对吗?
我有一个带有 NSStrings 的 NSObject。如何仅将具有唯一 obj.name 的对象添加到 NSMutableArray?我试过 NSOrderedSet 但它只有在你将 NSString 添加到数组而不是包含 NSString 的对象时才有效。
例子。
@@interface MyObject : NSObject
@property (strong, nonatomic) NSString *name;
@end
NSMutableArray *array = {MyObject.name,MyObject.name,MyObject.name};
Run Code Online (Sandbox Code Playgroud)
如何确保没有两个 MyObject 具有相同的名称?
I want to use this function's prototype for adding vocabulary to SiriKit. Apple's documentation shows the following sample code:
let workoutNames = self.sortedWorkoutNames()
let vocabulary = INVocabulary.shared()
vocabulary.setVocabularyStrings(workoutNames, of: .workoutActivityName)
Run Code Online (Sandbox Code Playgroud)
According to the documentation, I need to use an NSOrderedSet type for self.sortedWorkoutNames().
How to declare it and set it with an array of Strings?
EDIT: About the context project, I'm using Intents with Siri. The goal here, is to use specific word like 'Benchpress' or …
我正在尝试实现一个通用的 Mutable Ordered Set 类型,它需要符合许多协议才能与 Array 和 Set 在 Swift 中的行为方式相同。首先要做到的是,泛型类型元素的需求,以符合Hashable和通用结构需要顺应RandomAccessCollection,SetAlgebra,ExpressibleByArrayLiteral,AdditiveArithmetic,RangeReplaceableCollection和MutableCollection。我想也允许其访问标SubSequence添加支持PartialRangeThrough,PartialRangeUpTo,PartialRangeFrom和UnboundedRange也。
这是我的通用OrderedSet结构声明:
public struct OrderedSet<Element: Hashable> {
public init() { }
private var elements: [Element] = []
private var set: Set<Element> = []
}
Run Code Online (Sandbox Code Playgroud)
尽管这是一个自我回答的问题,但我真的很感激并鼓励提供新的答案、有关此实现的一些反馈和/或有关如何修复/改进它的建议:
编辑/更新:
该sorted方法按预期工作,但sort它的变异甚至不会改变元素顺序。
可变集合
声明变异
功能排序()
当 Self 符合 RandomAccessCollection 并且 Element 符合 Comparable 时可用。
var …Run Code Online (Sandbox Code Playgroud) 我需要分配一个返回值fetch:
try! c.fetch(fr)
Run Code Online (Sandbox Code Playgroud)
与多对多关系(itemsWithoutRatingOfLoggedInUser):
Utility.app(c: c).itemsWithoutRatingOfLoggedInUser = try! c.fetch(fr2)
Run Code Online (Sandbox Code Playgroud)
并得到以下错误。我能做什么?我试图与as!运算符进行转换,没有帮助。