Mac OS X中缺少NSEntityDescription setCompoundIndexes

时间:2011-12-14 13:21:33

标签: macos cocoa core-data

我错过了方法

  • compoundIndexes
  • setCompoundIndexes

在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(此处缺少管理复合索引的部分)

iOS:http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/CoreDataFramework/Classes/NSEntityDescription_Class/NSEntityDescription.html

1 个答案:

答案 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);