2014-10-28 23 views
6

Xcode 6 có rất nhiều lỗi. Nhưng tôi không hoàn toàn chắc chắn nếu đây là một lỗi hay không. Có thể không phải vì đây là thứ tôi vừa học.Không thể khởi tạo lớp con của NSManagedObject

Vấn đề của tôi là, bất cứ lúc nào tôi cố gắng để nhanh chóng lớp con của tôi về NSManagedObject, tôi không có tùy chọn để vượt qua đối số entity: NSEntityDescriptionNSManagedContext: insertIntoManagedContext để các nhà xây dựng, Xcode nói "Extra Đối số 'đơn vị' trong cuộc gọi"

Tôi đã tạo một dự án Xcode mới từ đầu, chỉ để xem liệu tôi có thể tạo lại vấn đề trong một dự án nhỏ hơn, nhỏ hơn hay không.

ToDoList.Item được đặt làm lớp thực thể Item trong Trình theo dõi mô hình dữ liệu.

Dưới đây là các mã:

override func viewDidLoad() { 

    super.viewDidLoad() 

    let appDel: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate 
    let context: NSManagedObjectContext = appDel.managedObjectContext! 

    let ent = NSEntityDescription.entityForName("Item", inManagedObjectContext: context)! 

    //compiler complains here 
    var item = Item(entity: ent, insertIntoManagedObjectContext: context)! 

} 

Dưới đây là các lớp con:

import UIKit 
import CoreData 

class Item: NSManagedObject { 

    @NSManaged var title: String 
    @NSManaged var completed: Bool 

} 

Tất cả help is appreciated.

Trả lời

5

Chỉ cần đi qua cùng một vấn đề: Init method for core data entity not available

Rõ ràng chúng ta phải thực hiện các phương pháp

init(entity: NSEntityDescription, insertIntoManagedObjectContext context, NSManagedObjectContext?) 

trong tùy chỉnh NSManagedObject lớp của chúng tôi. Vì vậy, chỉ cần thêm

override init(entity: NSEntityDescription, insertIntoManagedObjectContext context: NSManagedObjectContext?) { 
    super.init(entity: entity, insertIntoManagedObjectContext: context) 
} 

vào lớp tổ chức của bạn và nó sẽ hoạt động.

+0

Điều này phải được yêu cầu trong phiên bản SDK gần đây. Tôi đã nhìn thấy M2KDev trên youtube làm điều này mà không có nó. –

1

Hãy thử dòng cuối cùng mà không dấu chấm than, như thế này:

var item = Item(entity: ent, insertIntoManagedObjectContext: context) 

Và có lẽ Bạn chưa thêm tên ứng dụng của bạn để tên lớp:

lớp Swift đang namespaced đỡ phải thao tác Để sử dụng một lớp con Swift của lớp NSManagedObject với mô hình Dữ liệu cốt lõi của bạn, hãy đặt tiền tố tên lớp trong trường Lớp trong trình kiểm tra thực thể mô hình với tên mô-đun của bạn.

Class name https://developer.apple.com/library/mac/documentation/Swift/Conceptual/BuildingCocoaApps/WritingSwiftClassesWithObjective-CBehavior.html

+0

Tôi đã nói ở trên ... "ToDoList.Item được đặt làm lớp thực thể mục trong Trình theo dõi mô hình dữ liệu". ToDoList là tên dự án. Xóa dấu chấm than sẽ phát ra lỗi. Cảm ơn bạn đã nhập, mặc dù –

Các vấn đề liên quan