从Core Data获取数据时遇到问题。如果我的术语不具体或准确,我很抱歉,但我是Core Data的新手。
我正在使用Xcode 7 beta和Swift 2.设备操作系统设置为8.4。
该行:
plt.figure(1)
plt.subplot (121)
plt.title('1')
plt.imshow(matrix_lg, interpolation='bilinear', cmap=plt.cm.jet, vmin=np.log10(minVal), vmax = np.log10(maxVal))
plt.subplot(122)
plt.title('2')
plt.imshow(matrix_lg, interpolation='bilinear', cmap=plt.cm.jet, vmin=np.log10(minVal), vmax = np.log10(maxVal))
plt.colorbar()
给我这个错误:“'[AnyObject]'无法转换为'[Dog]?'”。
完整代码在这里:
let result = try managedContext.executeFetchRequest(dogFetch) as [Dog]?
}
我附上了一张图片来展示我的核心数据模型:
核心数据类是“标准”,从编辑器>自动创建。创建NSManagedObjectSubclass:
犬+ CoreDataProperties.swift:
do {
let dogEntity = NSEntityDescription.entityForName("Dog", inManagedObjectContext: managedContext)
let dog = Dog(entity: dogEntity!, insertIntoManagedObjectContext: managedContext)
let dogName = "Fido"
let dogFetch = NSFetchRequest(entityName: "Dog")
dogFetch.predicate = NSPredicate(format: "name == %@", dog)
let result = try managedContext.executeFetchRequest(dogFetch) as [Dog]?
if let dogs = result {
if dogs.count == 0 {
currentDog = Dog(entity: dogEntity!, insertIntoManagedObjectContext: managedContext)
currentDog.name = dogName
} else {
currentDog = dogs[0]
}
}
} catch let fetchError as NSError {
print("Could not fetch \(fetchError)")
}
Dog.swift:
import Foundation
import CoreData
extension Dog {
@NSManaged var name: String?
@NSManaged var walks: NSOrderedSet?
}
与Walk + CoreDataProperties.swift和Walk.swift基本相同。
-
编辑:所选答案解决了问题。我的想法是,这是Swift 2.x与Swift 1.x的变化,或者我从中得到代码的教程是错误的。
答案 0 :(得分:4)
你应该这样做
managedContext.executeFetchRequest(dogFetch) as? [Dog]
这是因为在这里投射不是保护,所以你应该保护自己免受崩溃(通过使用as?
进行投射。上述语句意味着executeFetchRequest
返回值应该被转换为{{1 (一个包含[Dog]
个实例的数组,顺便说一下它可以是空的),但只有在可能的情况下 - 否则转换会失败,你可以在catch语句中正确处理它。