我错过了方法
在Mac OS X 10.7 SDK的NSEntityDescription中。但是,它可以在iOS5.0 SDK中找到。
另一方面,Xcode非常了解复合索引,即使在Mac OS X下也是如此。它创建了像这样的xcdatamodels:<entity name="OHLCV" parentEntity="Sample" syncable="YES">
<attribute name="close" attributeType="Double" defaultValueString="0.0" syncable="YES"/>
<attribute name="high" attributeType="Double" defaultValueString="0.0" syncable="YES"/>
<attribute name="low" attributeType="Double" defaultValueString="0.0" syncable="YES"/>
<attribute name="open" attributeType="Double" defaultValueString="0.0" syncable="YES"/>
<attribute name="volume" attributeType="Integer 64" defaultValueString="0" syncable="YES"/>
<compoundIndexes>
<compoundIndex>
<index value="open"/>
<index value="close"/>
</compoundIndex>
</compoundIndexes>
</entity>
Apple可能只是忘记在Mac API中包含方法的声明吗?
以下是文档:
Mac:http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/CoreDataFramework/Classes/NSEntityDescription_Class/NSEntityDescription.html(此处缺少管理复合索引的部分)
答案 0 :(得分:0)
我已经设法通过自己声明它来调用未声明的方法(需要声明以便编译器接受它):
@interface NSEntityDescription ()
- (void)setCompoundIndexes:(NSArray*)anArray;
@end
稍后在我的代码中,我以编程方式创建我的NSManagedObjectModel,我可以调用它:
[entity setCompoundIndexes:
[NSArray arrayWithObjects:[NSArray arrayWithObjects:@"open", @"close", nil], nil]
];
我认为Apple刚忘记将这些方法放入CoreData API中。该功能在Mac OS X上也是绝对可用的,否则Xcode将不会在xcdatamodel建模工具中提供UI。
我可以进一步确认上述语句是否正常,因为我在sqlite3数据库中找到了CoreData创建的相应复合索引:
CREATE INDEX ZOHLCV_ZOPEN_ZCLOSE ON ZOHLV (ZOPEN, ZCLOSE);