2014-01-11 3 views
5

У меня неприятная ошибка, и я был бы признателен за любое руководство, указывающее на меня в общем направлении решения. Иногда я получаю следующее исключение, которое относится к вызову initWithCoder в 3 разных подклассах NSManagedObject в моей базовой модели данных. Если я удалю приложение с моего устройства и перезагружу его или сброшу содержимое на симуляторе, исключение исчезнет. Нет, где в моем коде я явно вызываю initWithCoder в подкласс NSManagedObject.NSManaged Object initWithCoder Error

Ошибка возникает случайно после редактирования случайных частей исходного кода. Любые идеи о том, с чего начать?

2014-01-11 15:59:22.078 Flip Evaluator and Manager[354:a0b] -[SellingCosts initWithCoder:]: unrecognized selector sent to instance 0xc2cec80 
2014-01-11 15:59:22.079 Flip Evaluator and Manager[354:a0b] CoreData: error: exception during fetchRowForObjectID: -[SellingCosts initWithCoder:]: unrecognized selector sent to instance 0xc2cec80 with userInfo of (null) 
2014-01-11 15:59:22.081 Flip Evaluator and Manager[354:a0b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[SellingCosts initWithCoder:]: unrecognized selector sent to instance 0xc2cec80' 
*** First throw call stack: 
(
    0 CoreFoundation      0x01e9a5e4 __exceptionPreprocess + 180 
    1 libobjc.A.dylib      0x01c1d8b6 objc_exception_throw + 44 
    2 CoreFoundation      0x01f37903 -[NSObject(NSObject) doesNotRecognizeSelector:] + 275 
    3 CoreFoundation      0x01e8a90b ___forwarding___ + 1019 
    4 CoreFoundation      0x01e8a4ee _CF_forwarding_prep_0 + 14 
    5 Foundation       0x01830b2a _decodeObjectBinary + 3498 
    6 Foundation       0x0182fc15 _decodeObject + 340 
    7 Foundation       0x0182fab9 -[NSKeyedUnarchiver decodeObjectForKey:] + 181 
    8 Foundation       0x018a168d +[NSKeyedUnarchiver unarchiveObjectWithData:] + 106 
    9 Foundation       0x018202e5 -[_NSKeyedUnarchiveFromDataTransformer transformedValue:] + 47 
    10 CoreData       0x0064bd09 _prepareResultsFromResultSet + 4105 
    11 CoreData       0x00649583 newFetchedRowsForFetchPlan_MT + 1795 
    12 CoreData       0x0063448e -[NSSQLCore newRowsForFetchPlan:] + 526 
    13 CoreData       0x0065302e -[NSSQLCore fetchRowForObjectID:] + 1198 
    14 CoreData       0x00650798 -[NSSQLCore newValuesForObjectWithID:withContext:error:] + 296 
    15 CoreData       0x00650667 -[NSPersistentStoreCoordinator(_NSInternalMethods) newValuesForObjectWithID:withContext:error:] + 71 
    16 CoreData       0x0064fa3b _PFFaultHandlerLookupRow + 411 
    17 CoreData       0x0064f897 -[NSFaultHandler fulfillFault:withContext:forIndex:] + 39 
    18 CoreData       0x0064f473 _PF_FulfillDeferredFault + 259 
    19 CoreData       0x0064f2c6 _sharedIMPL_pvfk_core + 70 
    20 CoreData       0x00653cd5 -[NSManagedObject(_PFDynamicAccessorsAndPropertySupport) _genericValueForKey:withIndex:flags:] + 85 
    21 CoreData       0x0068d781 _PF_Handler_Public_GetProperty + 161 
    22 CoreData       0x0068d685 -[NSManagedObject valueForKey:] + 149 
    23 Flip Evaluator and Manager   0x00030c4c -[OzCalculator sumTheValuesInSet:withAttributeKeyForValue:] + 428 
    24 Flip Evaluator and Manager   0x0002f7d5 -[OzCalculator sumMoreCostsAndUpdateDataModelFor:] + 165 
    25 Flip Evaluator and Manager   0x0002edc1 -[OzCalculator performAllCalculationsOnProperty:] + 817 
    26 Flip Evaluator and Manager   0x00002d37 -[OzPropertyConverter createAManagedPropertyFromAnEvaluatedProperty:] + 1175 
    27 Flip Evaluator and Manager   0x00041233 -[OzHaveYouPurchasedThisProperty goForwardToNextView] + 307 
    28 libobjc.A.dylib      0x01c2f874 -[NSObject performSelector:withObject:withObject:] + 77 
    29 UIKit        0x0098d0c2 -[UIApplication sendAction:to:from:forEvent:] + 108 
    30 UIKit        0x0098d04e -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 61 
    31 UIKit        0x00a850c1 -[UIControl sendAction:to:forEvent:] + 66 
    32 UIKit        0x00a85484 -[UIControl _sendActionsForEvents:withEvent:] + 577 
    33 UIKit        0x00a841fd -[UIControl touchesBegan:withEvent:] + 254 
    34 UIKit        0x009ca34b -[UIWindow _sendTouchesForEvent:] + 386 
    35 UIKit        0x009cb184 -[UIWindow sendEvent:] + 1232 
    36 UIKit        0x0099ee86 -[UIApplication sendEvent:] + 242 
    37 UIKit        0x0098918f _UIApplicationHandleEventQueue + 11421 
    38 CoreFoundation      0x01e2383f __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15 
    39 CoreFoundation      0x01e231cb __CFRunLoopDoSources0 + 235 
    40 CoreFoundation      0x01e4029e __CFRunLoopRun + 910 
    41 CoreFoundation      0x01e3fac3 CFRunLoopRunSpecific + 467 
    42 CoreFoundation      0x01e3f8db CFRunLoopRunInMode + 123 
    43 GraphicsServices     0x02c2a9e2 GSEventRunModal + 192 
    44 GraphicsServices     0x02c2a809 GSEventRun + 104 
    45 UIKit        0x0098bd3b UIApplicationMain + 1225 
    46 Flip Evaluator and Manager   0x0002e5dd main + 141 
    47 libdyld.dylib      0x030c1725 start + 0 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 

Код:

// 
// SellingCosts.h 
// Flip Evaluator and Manager 
// 

#import <Foundation/Foundation.h> 
#import <CoreData/CoreData.h> 

@class Cost, Property, TotalCosts; 

@interface SellingCosts : NSManagedObject 

@property (nonatomic, strong) NSNumber * deedPrep; 
@property (nonatomic, strong) NSNumber * realtyCommisionAmount; 
@property (nonatomic, strong) NSNumber * realtyCommisionPercent; 
@property (nonatomic, strong) NSNumber * totalCost; 
@property (nonatomic, strong) NSSet *moreCosts; 
@property (nonatomic, strong) Property *property; 
@property (nonatomic, strong) TotalCosts *totalCosts; 
@property (nonatomic, strong) NSNumber * transferTaxAmount; 
@property (nonatomic, strong) NSNumber * transferTaxPercent; 
@property (nonatomic, strong) NSNumber *totalIncompleteCost; 
@property (nonatomic, strong) NSNumber *totalCompleteCost; 

@end 

Вот метод, который вызывается, прежде чем что-то пойдет не так:

-(NSInteger)sumTheValuesInSet:(NSMutableSet *)set withAttributeKeyForValue:(NSString *)attributeKey 
{ 
    NSInteger sumToReturn = 0; 
    for (id obj in set) { 
     sumToReturn = sumToReturn +[[obj valueForKey:attributeKey] integerValue]; 
    } 

    return sumToReturn; 
} 

Метод перебирает через Cost объектов в NSSet[sellingCosts valueForKey:@"moreCosts"].

Вот модель для Cost объекта //

// Cost.h 
// Flip Evaluator and Manager 
// 

#import <Foundation/Foundation.h> 
#import <CoreData/CoreData.h> 

@class BuyingCosts, HoldingCosts, SellingCosts, OtherCosts, TotalCosts; 

@interface Cost : NSManagedObject 

@property (nonatomic, strong) BuyingCosts *buyingCosts; 
@property (nonatomic, strong) HoldingCosts *holdingCosts; 
@property (nonatomic, strong) SellingCosts *sellingCosts; 
@property (nonatomic, strong) OtherCosts *otherCosts; 
@property (nonatomic, strong) NSString * name; 
@property (nonatomic, strong) TotalCosts *incompleteCosts; 
@property (nonatomic, strong) TotalCosts *completedCosts; 
@property (nonatomic, strong) NSNumber *complete; 
@property (nonatomic, strong) id costType; 
@property (nonatomic, strong) NSNumber *amount; 

@end 
+0

Опубликовать детали модели и определения подкласса. У вас есть двоичные или трансформируемые атрибуты? –

+0

Бинарных атрибутов нет. Класс довольно прост. Нет добавленных методов для подкласса (реализация опубликована). – ChemDev

+0

Что касается трансформируемых атрибутов (как сказал Дункан выше)? –

ответ

0

Дайте вашу модель, а также это представляется преобразование проблемы на первый взгляд.

Вы также должны поделиться кодом в -sumTheValuesInSet:withAttributeKeyForValue:, поскольку это, кажется, последний пункт в вашем коде, прежде чем все пойдет не так.

+0

Я добавил код для метода, о котором вы говорили. Я хотел бы указать, что метод ссылается на объект Cost, который имеет свойство transformable property id costType, которое является слабой ссылкой на объект salesCosts. Также показана реализация объекта Cost. – ChemDev

+0

Так что мне удалось обойти проблему с помощью взломанного решения. Я добавил '- (id) initWithCoder: (NSCoder *) декодер;' методы, которые возвращают 'self' в определенные подклассы NSManagedObject, для которых это проблема. Это плохая идея для фиксации термина? – ChemDev

+0

Да, это бандана. Вы не решаете проблему. –

Смежные вопросы