发布于 2015-12-29 01:04:16 | 273 次阅读 | 评论: 1 | 来源: 网友投递

这里有新鲜出炉的Swift教程,程序狗速度看过来!

Swift编程语言

SWIFT,苹果于2014年WWDC(苹果开发者大会)发布的新开发语言,可与Objective-C*共同运行于Mac OS和iOS平台,用于搭建基于苹果平台的应用程序。


相信搞过swift的coreData开发的都应该知道,直接通过xcdatamodeld配置文件,通过Editor->Create NSManagedObject SubClass自动创建实体类后,通过class func entityForName(entityName: String, inManagedObjectContext context: NSManagedObjectContext) -> NSEntityDescription?这个方法获取实体时会报一个异常,如下:

 
CoreData: warning: Unable to load class named 'xxx' for entity 'xxx'.  Class not found, using default NSManagedObject instead.  
 
 

该异常是由于swift的注解机制引起的,首次运行只会对声明了@objc的类认为是实体类。解决办法如下:

1.临时处理方法

在对应的实体类上声明@objc(TestEntity),代码如下:

 
 
@objc(TestEntity)  
class TestEntity: NSManagedObject {  

2.永久处理方法

每个实体类都做上面的处理有些繁琐,按照下面的方法修改coreData生成实体类的模版,这样自动生成时就会自动加上该句声明。具体如下:

首先,找到xcode的实体类生成模版NSManagedObject subclass.xctemplate,具体路径<Xcode应用路径>/Contents/Developer/Library/Xcode/Templates/File Templates/Core Data/NSManagedObject subclass.xctemplate,如图:

然后,将该文件夹连同以下文件复制到~/Library/Developer/Xcode/Templates下(注意要自己创建Templates文件夹),如图:

最后,修改这个文件夹下的___FILEBASENAME___.swift文件,自动生成时就会根据这个模版进行生成了。

代码如下:

 
import Foundation  
import CoreData  
  
@objc(___FILEBASENAMEASIDENTIFIER___)//和类名一致即可,将会按照类型添加括号中内容  
class ___FILEBASENAMEASIDENTIFIER___: ___COREDATAMANAGEDOBJECTSUPERCLASS___ {  
  
___COREDATAPROPERTYIMPLEMENTATIONS___  
}  


最新网友评论  共有(1)条评论 发布评论 返回顶部
zytn 发布于2016-04-16 16:57:04
谢谢你了!
支持(0)  反对(0)  回复

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务