2015-09-30 52 views
0

每當我從集合視圖中刪除項目時,出現此錯誤(致命錯誤:NSArray元素無法匹配Swift數組元素類型),關閉應用程序,重新啓動應用程序,然後返回到該項目。我發現類似的解決方案重新命名初始化程序,但似乎並不適合我。解析:致命錯誤:NSArray元素無法匹配Swift數組元素類型

**AppDelegate.swift** 

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

// register PFObject subclasses 
Task.registerSubclass() 
Task.initialize() 

Project.registerSubclass() 
Project.initialize() 

User.registerSubclass() 
User.initialize() 


**Project.swift** 

import UIKit 
import Parse 

public class Project: PFObject, PFSubclassing 
{ 

    // MARK: - Public API 
    @NSManaged public var projectTitle: String! 
    @NSManaged public var owner: User! 
    @NSManaged public var tasks: [Task] 

    // MARK - Required PFSubclassing Parse setup 
    override public class func initialize() 
    { 
    struct Static { 
     static var onceToken: dispatch_once_t = 0 
    } 
    dispatch_once(&Static.onceToken) { 
     Task.initialize() 
     self.registerSubclass() 
    } 
    } 

    public static func parseClassName() -> String { 
    return "Project" 
    } 


    // MARK: Conveinience Init 

    init(projectTitle: String, owner: User, tasks: [Task]) 
    { 
    super.init() 
    self.projectTitle = projectTitle 
    self.owner = owner 
    self.tasks = tasks 
    } 

    override init() { super.init() } 

} 


**Task.swift** 
import UIKit 
import Parse 

public class Task: PFObject, PFSubclassing 
{ 

    // MARK: - Public API 
    @NSManaged public var title: String 
    @NSManaged public var isChecked: Bool 
    @NSManaged public var projectOwner: Project 
    @NSManaged public var category: String 
    @NSManaged public var isImportant: Bool 

    // MARK - Required PFSubclassing Parse setup 
    override public class func initialize() 
    { 
    struct Static { 
     static var onceToken: dispatch_once_t = 0 
    } 
    dispatch_once(&Static.onceToken) { 
     self.registerSubclass() 
    } 
    } 

    public static func parseClassName() -> String { 
    return "Task" 
    } 


    // MARK: Conveinience Init 

    // Create new project 
    init(title: String, projectOwner: Project, isChecked: Bool, category: String, isImportant: Bool) 
    { 
    super.init() 
    self.title = title 
    self.projectOwner = projectOwner 
    self.isChecked = isChecked 
    self.category = category 
    self.isImportant = isImportant 
    } 

    override init() { super.init() } 




} 

當我嘗試使用tasks數組時,會發生錯誤。我將它加載到UICollectionView中。

下面是可能相關的代碼,我搶任務從解析:

// Fetch data from Parse 
    func fetchProject() { 
    let isCurrentTab = navigationController?.tabBarItem.title 
    let tasksQuery = PFQuery(className: Task.parseClassName()) 
    tasksQuery.whereKey("category", equalTo: isCurrentTab!) 
    tasksQuery.whereKey("projectOwner", equalTo: project) 
    tasksQuery.findObjectsInBackgroundWithBlock { (tasks, error) -> Void in 
     if error == nil { 
     self.project.tasks.removeAll() 
     print(tasks) 

      for task in tasks! { 
      print(task) 
      let task = task as! Task 
      self.project.tasks.append(task) 
      } 

     self.collectionView?.reloadData() 
     } else { 
     print("\(error?.localizedDescription)") 
     } 
    } 
    } 

我使用的Xcode 7.1和解析v1.8.5

任何幫助,將不勝感激!

回答

0

我結束了使用指針訪問我的任務數組,而不是將它嵌套在projects數組中。這樣,我就可以直接對該數組進行所有調用,並且不會因嘗試進入嵌套級別而丟失任何內容。

相關問題