我正在嘗試從未公開的API(OsiriX)加載數據。Mystery Key Value Coding Key
獲取NSManagedObject這樣的: NSManagedObject *itemStudy = [[BrowserController databaseOutline] itemAtRow: [[BrowserController databaseOutline] selectedRow]];
的作品就好了。
但得到NSManagedObject這樣的: seriesArray = [_context executeFetchRequest:request error:&error]; NSManagedObject *itemSeries = [seriesArray objectAtIndex:0];
當我打電話[itemSeries valueForKey:@"type"]
2010-05-27 11:04:48.178 rcOsirix[27712:7b03] Exception: [<NSManagedObject 0xd30fd0> valueForUndefinedKey:]: the entity Series is not key value coding-compliant for the key "type".
這完全混淆了我產生一個錯誤。如果我打印KVC值itemSeries我得到這個名單:
2010-05-27 11:04:48.167 rcOsirix[27712:7b03] KVC comment
2010-05-27 11:04:48.168 rcOsirix[27712:7b03] KVC date
2010-05-27 11:04:48.168 rcOsirix[27712:7b03] KVC dateAdded
2010-05-27 11:04:48.169 rcOsirix[27712:7b03] KVC dateOpened
2010-05-27 11:04:48.169 rcOsirix[27712:7b03] KVC displayStyle
2010-05-27 11:04:48.170 rcOsirix[27712:7b03] KVC id
2010-05-27 11:04:48.170 rcOsirix[27712:7b03] KVC modality
2010-05-27 11:04:48.170 rcOsirix[27712:7b03] KVC name
2010-05-27 11:04:48.171 rcOsirix[27712:7b03] KVC numberOfImages
2010-05-27 11:04:48.171 rcOsirix[27712:7b03] KVC numberOfKeyImages
2010-05-27 11:04:48.171 rcOsirix[27712:7b03] KVC rotationAngle
2010-05-27 11:04:48.172 rcOsirix[27712:7b03] KVC scale
2010-05-27 11:04:48.172 rcOsirix[27712:7b03] KVC seriesDICOMUID
2010-05-27 11:04:48.173 rcOsirix[27712:7b03] KVC seriesDescription
2010-05-27 11:04:48.173 rcOsirix[27712:7b03] KVC seriesInstanceUID
2010-05-27 11:04:48.173 rcOsirix[27712:7b03] KVC seriesSOPClassUID
2010-05-27 11:04:48.174 rcOsirix[27712:7b03] KVC stateText
2010-05-27 11:04:48.174 rcOsirix[27712:7b03] KVC thumbnail
2010-05-27 11:04:48.174 rcOsirix[27712:7b03] KVC windowLevel
2010-05-27 11:04:48.175 rcOsirix[27712:7b03] KVC windowWidth
2010-05-27 11:04:48.175 rcOsirix[27712:7b03] KVC xFlipped
2010-05-27 11:04:48.176 rcOsirix[27712:7b03] KVC xOffset
2010-05-27 11:04:48.176 rcOsirix[27712:7b03] KVC yFlipped
2010-05-27 11:04:48.176 rcOsirix[27712:7b03] KVC yOffset
2010-05-27 11:04:48.177 rcOsirix[27712:7b03] KVC mountedVolume
2010-05-27 11:04:48.177 rcOsirix[27712:7b03] KVC study
2010-05-27 11:04:48.178 rcOsirix[27712:7b03] KVC images
的KVC爲itemStudy是這樣的:
2010-05-27 10:46:40.336 OsiriX[27266:a0f] KVC accessionNumber
2010-05-27 10:46:40.336 OsiriX[27266:a0f] KVC comment
2010-05-27 10:46:40.336 OsiriX[27266:a0f] KVC date
2010-05-27 10:46:40.336 OsiriX[27266:a0f] KVC dateAdded
2010-05-27 10:46:40.336 OsiriX[27266:a0f] KVC dateOfBirth
2010-05-27 10:46:40.336 OsiriX[27266:a0f] KVC dateOpened
2010-05-27 10:46:40.337 OsiriX[27266:a0f] KVC dictateURL
2010-05-27 10:46:40.337 OsiriX[27266:a0f] KVC expanded
2010-05-27 10:46:40.337 OsiriX[27266:a0f] KVC hasDICOM
2010-05-27 10:46:40.337 OsiriX[27266:a0f] KVC id
2010-05-27 10:46:40.337 OsiriX[27266:a0f] KVC institutionName
2010-05-27 10:46:40.337 OsiriX[27266:a0f] KVC lockedStudy
2010-05-27 10:46:40.337 OsiriX[27266:a0f] KVC modality
2010-05-27 10:46:40.338 OsiriX[27266:a0f] KVC name
2010-05-27 10:46:40.338 OsiriX[27266:a0f] KVC numberOfImages
2010-05-27 10:46:40.338 OsiriX[27266:a0f] KVC patientID
2010-05-27 10:46:40.338 OsiriX[27266:a0f] KVC patientSex
2010-05-27 10:46:40.338 OsiriX[27266:a0f] KVC patientUID
2010-05-27 10:46:40.338 OsiriX[27266:a0f] KVC performingPhysician
2010-05-27 10:46:40.339 OsiriX[27266:a0f] KVC referringPhysician
2010-05-27 10:46:40.339 OsiriX[27266:a0f] KVC reportURL
2010-05-27 10:46:40.339 OsiriX[27266:a0f] KVC stateText
2010-05-27 10:46:40.339 OsiriX[27266:a0f] KVC studyInstanceUID
2010-05-27 10:46:40.339 OsiriX[27266:a0f] KVC studyName
2010-05-27 10:46:40.339 OsiriX[27266:a0f] KVC windowsState
2010-05-27 10:46:40.339 OsiriX[27266:a0f] KVC albums
2010-05-27 10:46:40.340 OsiriX[27266:a0f] KVC series
如果我使用代碼:
NSDictionary *props = [[item entity] propertiesByName];
for (NSString *s in [props allKeys]) {
NSLog(@"KVC %@", s);
}
然而itemStudy
沒有拋出錯誤,如果我打電話[itemStudy valueForKey:@"type"]
當它應該因爲沒有KVC @"type"
!!!
當然,對象是不同的,但是他們都沒有包含關鍵@"type"
,他們都應該拋出錯誤,但是這兩種情況的Osirix代碼測試:
if ([[item valueForKey:@"type"] isEqualToString:@"Series"]) {
...
}
if ([[item valueForKey:@"type"] isEqualToString:@"Study"]) {
...
}
,並拋出任何錯誤。然而,當我加載相同確切模型的NSManagedObject
和實體@"Series"
時,它會在傳入上述條件時拋出「無關鍵值」。
我錯過了什麼嗎? itemSeries和itemStudy的superentity
和subentities
都是nil
,所以它們不會從具有KVC @"type"
的東西繼承。
我完全無法解釋發生了什麼事。
---編輯---
我知道沒有人能解釋這是怎麼回事......但也許從哪裏開始尋找? itemStudy如何擁有額外的KVC @「type」,它不會顯示在它的屬性列表中?
謝謝您的幫助,
-Stephen
---編輯---
行,所以周圍挖後,我越覺得這是我的一個CoreData誤解。
該API包括類別DicomSeries
和DicomStudy
,它們是NSManagedObject的子類幷包含在xcdatamodel文件中。
我包含xcdatamodel文件作爲「編譯源代碼」和DicomSeries.h和DicomStudy。^ h
DicomSeries
和DicomStudy
是 「硬編碼」 有:
- (NSString*) type
{
return @"Series";
}
但對象創建爲itemStudy
不要調用此方法。上面創建的對象類似itemStudy
。即使在主程序中調用的對象也是如此。但不是我用同一個數據庫的獲取請求做的。
即使我做的:
DicomSeries *itemSeries = [_context executeFetchRequest:request]
凡要求具有實體@"Series"
這是DicomSeries
類的,所以應該回應:
[itemSeries valueForKey:@"type"];
但事實並非如此。
我覺得我缺少的CoreData有一個巨大的缺口。我NSManagedObjectModel
說我用我的持久存儲協調員和我的背景有Series
實體,是managedObjectClassName
DicomSeries
所以...
耶。
lol,wut?
這很好,但它給了我像_retain_1這樣的東西,它看起來更像是NSObject方法,而不是對象所具有的東西。 「@」類型「'什麼都沒有」 – 2010-05-28 14:49:21