2012-09-06 11 views
11

कोर डेटा प्राप्त संपत्ति अभिव्यक्ति में हल हो जाती है, स्पष्ट रूप से $FETCH_SOURCE ऑब्जेक्ट के बजाय ऑब्जेक्ट आईडी पर हल हो जाती है। इससे अपवाद हुआ "कक्षा कुंजी-मूल्य कोडिंग नहीं है ..."। यह सच है क्योंकि यह उस वस्तु का जवाब देने वाली वस्तु है।

मैं प्रसंस्करण संपत्ति के अनुमान के हिस्से के रूप में स्रोत ऑब्जेक्ट की संपत्ति मान का उपयोग करना चाहता हूं।

कोई विचार यह कैसे ठीक करें?

*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<_NSObjectID_48_0 0x10101b200> valueForUndefinedKey:]: this class is not key value coding-compliant for the key messageType.' 
*** First throw call stack: 
(
    0 CoreFoundation      0x00007fff92ba00c6 __exceptionPreprocess + 198 
    1 libobjc.A.dylib      0x00007fff8f85e3f0 objc_exception_throw + 43 
    2 CoreFoundation      0x00007fff92c34249 -[NSException raise] + 9 
    3 Foundation       0x00007fff9518b08c -[NSObject(NSKeyValueCoding) valueForUndefinedKey:] + 238 
    4 Foundation       0x00007fff950d2df9 -[NSObject(NSKeyValueCoding) valueForKey:] + 400 
    5 Foundation       0x00007fff950f36a8 -[NSObject(NSKeyValueCoding) valueForKeyPath:] + 341 
    6 Foundation       0x00007fff950a3489 -[NSFunctionExpression expressionValueWithObject:context:] + 751 
    7 CoreData       0x00007fff88cbbdda -[NSSQLSimpleWhereIntermediate initWithPredicate:inScope:] + 618 
    8 CoreData       0x00007fff88cbb672 -[NSSQLGenerator generateWhereIntermediatesInContext:] + 162 
    9 CoreData       0x00007fff88cbb010 -[NSSQLGenerator generateIntermediatesForFetchInContext:countOnly:] + 416 
    10 CoreData       0x00007fff88cb7d30 -[NSSQLGenerator newSQLStatementForFetchRequest:ignoreInheritance:countOnly:nestingLevel:] + 400 
    11 CoreData       0x00007fff88cb7a97 -[NSSQLAdapter _newSelectStatementWithFetchRequest:ignoreInheritance:] + 471 
    12 CoreData       0x00007fff88cb76b6 -[NSSQLCore newRowsForFetchPlan:] + 118 
    13 CoreData       0x00007fff88cb6f2e -[NSSQLCore objectsForFetchRequest:inContext:] + 526 
    14 CoreData       0x00007fff88cb6a91 -[NSSQLCore executeRequest:withContext:error:] + 225 
    15 CoreData       0x00007fff88cb5f72 -[NSPersistentStoreCoordinator executeRequest:withContext:error:] + 2114 
    16 CoreData       0x00007fff88cb4309 -[NSManagedObjectContext executeFetchRequest:error:] + 537 
    17 CoreData       0x00007fff88cfca4e -[NSManagedObjectContext(_NestedContextSupport) _parentObjectsForFetchRequest:inContext:error:] + 414 
    18 CoreData       0x00007fff88d3072a __82-[NSManagedObjectContext(_NestedContextSupport) executeRequest:withContext:error:]_block_invoke_0 + 634 
    19 libdispatch.dylib     0x00007fff8b2710b6 _dispatch_client_callout + 8 
    20 libdispatch.dylib     0x00007fff8b272723 _dispatch_barrier_sync_f_invoke + 39 
    21 CoreData       0x00007fff88cfc87c _perform + 172 
    22 CoreData       0x00007fff88cfc6c2 -[NSManagedObjectContext(_NestedContextSupport) executeRequest:withContext:error:] + 354 
    23 CoreData       0x00007fff88cb4309 -[NSManagedObjectContext executeFetchRequest:error:] + 537 
    24 CoreData       0x00007fff88d0481e -[NSFaultHandler retainedFulfillAggregateFaultForObject:andRelationship:withContext:] + 254 
    25 CoreData       0x00007fff88d7faa8 -[_NSFaultingMutableArray willRead] + 120 
    26 CoreData       0x00007fff88d7fe99 -[_NSFaultingMutableArray count] + 25 
    27 CoreFoundation      0x00007fff92b82e69 -[NSArray lastObject] + 25 
    28 Scuttlebutt       0x0000000100041aab -[BSMessageCellView setObjectValue:] + 283 
    29 AppKit        0x00007fff936ca006 -[NSTableRowData _addViewToRowView:atColumn:row:] + 696 
    30 AppKit        0x00007fff936c9b5f -[NSTableRowData _addViewsToRowView:atRow:] + 151 
    31 AppKit        0x00007fff936c80f5 -[NSTableRowData _addRowViewForVisibleRow:withPriorView:] + 415 
    32 AppKit        0x00007fff936c7e7a -[NSTableRowData _addRowViewForVisibleRow:withPriorRowIndex:inDictionary:withRowAnimation:] + 272 
    33 AppKit        0x00007fff936c7149 -[NSTableRowData _unsafeUpdateVisibleRowEntries] + 740 
    34 AppKit        0x00007fff936c6ce1 -[NSTableRowData updateVisibleRowViews] + 119 
    35 AppKit        0x00007fff936da8b3 -[NSTableRowData _idleUpdateVisibleRows] + 66 
    36 CoreFoundation      0x00007fff92b5cdc4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 20 
    37 CoreFoundation      0x00007fff92b5c8dd __CFRunLoopDoTimer + 557 
    38 CoreFoundation      0x00007fff92b420c9 __CFRunLoopRun + 1513 
    39 CoreFoundation      0x00007fff92b416e2 CFRunLoopRunSpecific + 290 
    40 HIToolbox       0x00007fff9427e0a4 RunCurrentEventLoopInMode + 209 
    41 HIToolbox       0x00007fff9427de42 ReceiveNextEventCommon + 356 
    42 HIToolbox       0x00007fff9427dcd3 BlockUntilNextEventMatchingListInMode + 62 
    43 AppKit        0x00007fff93544b13 _DPSNextEvent + 685 
    44 AppKit        0x00007fff935443d2 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 128 
    45 AppKit        0x00007fff9353b773 -[NSApplication run] + 517 
    46 AppKit        0x00007fff934e01a6 NSApplicationMain + 869 
    47 Scuttlebutt       0x0000000100002225 main + 53 
    48 Scuttlebutt       0x00000001000021e4 start + 52 
    49 ???         0x0000000000000003 0x0 + 3 
) 

यह वही आया जब मैं हमलावर वस्तु का विवरण डंपिंग की कोशिश की है - काफी दिखाई है कि यह एक वस्तु आईडी के बजाय वस्तु ही है।

(lldb) expression (NSString*) [(id)0x10101b200 description] 
(NSString *) $0 = 0x0000000108b03880 @"0x10101b200 <x-coredata://8F1FBB6B-505B-4169-A9D0-10D48CE5D4DC/YammerMessage/p101>" 
(lldb) expression (Class) [(id)0x10101b200 class] 
(Class) $2 = _NSObjectID_48_0 
+0

बहुत यकीन है कि आप अपने भविष्य में अपने $ FETCH_SOURCE के गुणों तक पहुंच सकते हैं। मुझे यकीन है कि मेरे पास है। दस्तावेज़ों की जांच करें [https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdRelationships.html#//apple_ref/doc/uid/TP40001857-SW7]। क्या आप अपना भविष्यवाणी पोस्ट कर सकते हैं? –

+0

मुझे एक ही समस्या का सामना करना पड़ रहा है और ऐसा लगता है कि यह RestKit api का उपयोग कर संदर्भों के निर्माण से संबंधित है। अगर मैं नियमित कॉर्डटा स्टैक का उपयोग करता हूं तो सबकुछ काम करता है जैसा इसे करना चाहिए। क्या आपको एक समाधान मिला? – Donnit

उत्तर

1

आप NSManagedObjects प्राप्त करने के लिए विधि setResultType के साथ एक NSFetchRequest का परिणाम प्रकार सेट कर सकते :,, आप NSManagedObjectResultType के लिए सेट करने के लिए है।

NSFetchRequest *fetchrequest = [[NSFetchRequest alloc] init]; 
[fetchRequest setResultType:NSManagedObjectResultType]; 

आप XCode की CoreData संपादक का उपयोग करते हैं, तो आप लाने का अनुरोध का चयन और सही उपयोगिताओं टैब में 'डेटा मॉडल Inspektor' टैब पर नेविगेट करके परिणाम प्रकार का चयन कर सकते हैं।

संपादित करें: इस screenshot

+0

कोर्डाटा संपादक में प्राप्त संपत्ति का चयन करना मैं केवल उपयोगकर्ता नाम, शब्दकोश का नाम, गंतव्य, भविष्यवाणी और कुंजी-मूल्य जोड़ सेट कर सकता हूं। आप परिणाम प्रकार कैसे चुनते हैं? धन्यवाद। – Donnit

+0

मैंने अपने उत्तर में एक स्क्रीनशॉट जोड़ा है – MeXx

0

यह आईओएस के भविष्य के संस्करण में तय किया गया है (मैं एक बग प्रस्तुत की।) देखें

+0

क्या आप थोड़ा विस्तार कर सकते हैं? क्या यह एक आईओएस बग की पुष्टि है? –

+0

I (और ऐप्पल डेवलपर फ़ोरम में अन्य) आईओएस 7.1 में एक ही समस्या में आ रहे हैं - मैंने बग # 16697979 सबमिट किया है। – Rupert

+0

क्या यह एक पुष्टिकरण तय है? बीटीडब्ल्यू, यह एक ओएस एक्स ऐप है। – adib

3

आप बिल्कुल सही कर रहे हैं। $ FETCH_SOURCE NSManagedObjectID को हल करता है, इसलिए $ FETCH_SOURCE.myProperty जैसी कोई भी चीज़ अपवाद फेंक देगी (भले ही ऐप्पल का दस्तावेज़ इस नोटेशन का उपयोग करता हो)।

@implementation NSManagedObjectID (FetchFix) 

- (id)valueForUndefinedKey:(NSString *)key { 

    // Try to get the real object 
    NSManagedObject *object = [[NSManagedObjectContext defaultContext] objectWithID:self]; 
    return [object valueForKey:key]; 

} 

@end 

पी.एस.:

मैं अपने प्रोजेक्ट है, जो कॉल लग जाती है और वास्तविक वस्तु को फ़ॉरवर्ड के लिए निम्न श्रेणी जोड़कर इसे हल मैं जादुई रिकार्ड का उपयोग कर रहा हूं, इसलिए defaultContext शॉर्टकट। अपने कोड में एक उपयुक्त एमओसी का प्रयोग करें।

+0

यह केवल तभी काम करेगा यदि आपके पास एक ही संदर्भ है, जैसे जादुई रिकॉर्ड।एकाधिक कोर डेटा स्टैक के साथ अधिक जटिल ऐप्स पर काम नहीं करेगा और इसलिए कई संदर्भ जो सक्रिय हो सकते हैं। एक प्रबंधित ऑब्जेक्ट आईडी के अलावा आमतौर पर संदर्भ-कम होता है। – adib

+0

आप सही हैं। यह एक त्वरित समाधान के रूप में है, एक सार्वभौमिक समाधान नहीं। – frenya

+0

आपने हमारे दिन को बचाया है :), बहुत बहुत धन्यवाद। –