我是iOS开发和swift的新手,我使用Realm进行快速项目。
首先,我创建了一个Realm Object的子类:
class ClassB: Object {
var id = 0
var name: String = ""
let aLotOfA = List<ClassA>()
override static func primaryKey() -> String? {
return "id"
}
}
然后我又上了一堂课:
class ClassC: NSObject {
static let cManager = ClassC()
func defaultB() -> ClassB {
let instanceA = ClassA()
let instanceB = ClassB()
instanceB.name = "String"
instanceB.aLotOfA.append(instanceA)
return instanceB
}
}
然后我在某处创建了ClassB的实例:
class ClassD: Object {
let aB: ClassB = ClassC.cManager.defaultB()
}
我有这堂课:
defaultB()
当我调用let instanceA = ClassA()
时,第一行("Object type '(null)' does not match RLMArray type 'ClassA'."
)使instanceA为null。我一直在控制台中接收消息,如下所示:
"The `ClassD.aB` property must be marked as being optional."
或
public class Person {
private final Set<Person> neighbours = new HashSet<>();
private final String name;
public Person(String name) {
this.name = name;
}
public void addNeighbour(Person p)
{
neighbours.add(p);
p.neighbours.add(this);
}
public int calculateDistanceTo(Person p)
{
return calculateDistanceTo(p, 0, Collections.emptySet());
}
private int calculateDistanceTo(Person person, int count, Set<Person> tried)
{
if (neighbours.contains(person))
return count;
Set<Person> nextTry = new HashSet<>(tried);
nextTry.add(this);
return neighbours.stream()
.filter(p -> !nextTry.contains(p))
.mapToInt(p -> p.calculateDistanceTo(person, count+1, nextTry))
.filter(i -> i>=0)
.findFirst()
.orElse(-1);
}
@Override
public String toString() {
return "Person{" + "name=" + name + '}';
}
}
我不知道这里有什么问题。请有人帮助我,非常感谢。
我的环境:
Mac OS X 10.11.1 + Xcode 7.1
Realm是最新的(刚刚从realm.io下载)
基础SDK:iOS 9.1
部署目标:iOS 9
答案 0 :(得分:1)
正如zuziaka所指出的,您需要使用List
声明所有持久属性。这不适用于RealmOptional
和ClassA.propA
属性。
此外,Realm不支持枚举。您需要将属性Int
声明为rawValue
并使用class ClassA {
var propA: Int = EnumA.ValueA.rawValue
…
}
初始化其默认值:
ClassD.aB
必须始终将一对一关系标记为可选。这就是属性multiplier
的情况。