2015-09-05 54 views
2

我正在执行解析到我的swift应用程序。 我有子类,其中一个子类有一个成员对象是另一个解析子类。当我尝试访问该对象时,应用程序获取“由于未捕获的异常”NSInvalidArgumentException“而终止应用程序,原因:' - [fve.Workout sets]:无法识别的选择器发送到实例0x1740d0d10'”解析swift子类关系

任何想法可以访问自己是PBObject子类的PFObject子类的元素吗?

这是我如何申报对象:

class Workout: PFObject, PFSubclassing { 
    @NSManaged var date: NSDate 
    @NSManaged var workoutTime: Int 
    @NSManaged var sets: [ExerciseSet] 
    ... 
} 

class ExerciseSet: PFObject, PFSubclassing { 
    @NSManaged var exercise: Exercise 
    @NSManaged var sets: [SingleSet] 
    ... 
} 

而这会导致系统崩溃时,我尝试访问该字段:

for workout in historicalWorkoutsParse { 
    println("workout \(workout)") 
    let exerciseSets = workout.sets 
    println("exerciseSet: \(exerciseSets)") 
} 

即使我看到,在存在数据object:

workout <Workout: 0x1740cf8f0, objectId: A3218Oxiuh, localId: (null)> { 
    date = "2015-09-05 19:39:43 +0000"; 
    sets =  (
     "<ExerciseSet: 0x1740cf960, objectId: V54sAUKSMf, localId: (null)>" 
    ); 
    user = "<PFUser: 0x174109240, objectId: LbeTd8GqwU, localId: (null)>"; 
    workoutTime = 0; 
} 

谢谢!

回答

2

您必须application:didFinishLaunchingWithOptions:

您还需要重写parseClassName在定制子类

+0

感谢DBoyer,我试过但仍然看到崩溃(见下面的评论为基督徒)... – achen1217

3

如果使用PFSubclassing需要调用registerSubclass之前,你可以使用类调用Exercise.registerSubclass()Parse.setApplicationId("YOUR_APPLICATION_ID")。此外,它拥有Parse.setApplicationId调用之前完成:

Workout.registerSubclass() 
ExerciseSet.registerSubclass 
//Parse.setApplicationId 
+0

谢谢,我试着添加所有我的PFSubclasses但仍然看到相同的崩溃。另外,我遵循http://www.raywenderlich.com/98831/parse-tutorial-getting-started-web-backends,所以我已经在类本身的初始化方法中使用了registerSubclass。 任何想法?我是否必须在某处指定关系或关键...? – achen1217

2

解析似乎并不喜欢,我用“套”为对象的名称。当我将它改为“exerciseSet”时,它似乎工作(它也工作,当我作为字典访问它...锻炼[“套”])