NSEntityDescription setCompoundIndexes отсутствует в Mac OS X - PullRequest
0 голосов
/ 14 декабря 2011

мне не хватает методов

  • compoundIndexes
  • setCompoundIndexes

в NSEntityDescription в Mac OS X 10.7 SDK. Это, однако, доступно в 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 голосов
/ 15 декабря 2011

Мне удалось вызвать необъявленный метод, объявив его сам (должен быть объявлен так, чтобы компилятор принял его):

@interface NSEntityDescription ()
- (void)setCompoundIndexes:(NSArray*)anArray;
@end

позже в моем коде, где я создаю свой NSManagedObjectModel программно, я могу назвать его:

[entity setCompoundIndexes:
    [NSArray arrayWithObjects:[NSArray arrayWithObjects:@"open", @"close", nil], nil]
];

Я думаю, что Apple просто забыла поместить методы в API CoreData. Эта функция определенно доступна и в Mac OS X, иначе Xcode не будет предлагать пользовательский интерфейс в инструменте моделирования xcdatamodel.

Я также могу подтвердить, что приведенные выше операторы работают, потому что я нашел соответствующий составной индекс, созданный CoreData в базе данных sqlite3:

CREATE INDEX ZOHLCV_ZOPEN_ZCLOSE ON ZOHLV (ZOPEN, ZCLOSE);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...