5

我想在覈心數據NSManagedObject中保留一個塊(如果可能的話)。我有一個NSManagedObject的繼承類。 該類有一個塊來滿足一些異步調用。我嘗試將該塊存儲爲Transformable和Transient屬性。當我嘗試調用塊之前加載我的NSManagedObject我有一個不良的內存訪問"EXC_BAD_ACCESS"是否可以在NSManagedObject中存儲塊?

如果我不檢查的變形標誌我有類似這樣的例外:

-[__NSStackBlock__ encodeWithCoder:]: unrecognized selector sent to instance 0xbfffd930 

我在的iOS是新。我在啓用ARC的iOS 5 SDK下工作。這是我的代碼摘錄:

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

@class ModbusRegister, Board; 
typedef void (^DataBlockType)(NSArray *listRegister); 

@interface EnergyEntry : NSManagedObject 
- (void)invokeWithData: (NSArray *)listRegister; 

@property (nonatomic, copy) DataBlockType datablock; 

@end 

#import "EnergyEntry.h" 

@implementation EnergyEntry 

@dynamic datablock; 

- (void)invokeWithData: (NSArray *)listRegister{ 

    self.datablock(listRegister); 
} 

@end 

當我試圖來存儲塊:

[energyEntry setValue:@"Energía activa" forKey:@"name"]; 
[energyEntry setValue:[NSNumber numberWithDouble:0] forKey:@"value"]; 
[energyEntry setValue:currentBoard forKey:@"board"]; 

[energyEntry setValue:^(NSArray *listRegister){ 
    //...my block operations to store 
} forKey:@"datablock"]; 

最後,當我調用塊和錯誤被觸發:

NSArray *listRegister=... //my ready array 
[energyEntry invokeWithData:listRegister]; 

回答

3

你不能將塊存儲爲可變形類型。根據Apple documentation可變形的對象必須轉換爲NSData。塊不能轉換爲NSData,因爲它是編譯器對編譯代碼的引用,而不是可以移動的一些數據。

請注意,該塊就像一個匿名方法。您可以多次調用它,每次都使用不同的參數。所以沒有什麼會阻止你將塊存儲一次,並在每次異步調用中分別多次調用它。如果你認爲你需要很多塊,那麼很可能你只需要存儲應該傳遞給每個塊調用的數據。

相關問題