5

Mümkünse, çekirdek verisi NSManagedObject içinde bir bloğu sürdürmek istiyorum. NSManagedObject öğesinden devralınan bir sınıfım var. Bu sınıf, bazı zaman uyumsuz çağrıları karşılamak için bir bloğa sahiptir. Bloğu Dönüştürülebilir ve Geçici bir öznitelik olarak kaydetmeye çalıştım. NSManagedObject öğemi yüklemeden önce bloğu çağırmaya çalıştığımda "EXC_BAD_ACCESS" hatalı bir bellek erişimim var.NSManagedObject öğesinin içinde bir blok depolamak mümkün mü?

Ben dönüştürülebilir bayrağı kontrol etmezseniz ben buna benzer bir istisna vardır:

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

Ben iOS'ta yeniyim. ARC etkinleştirilmiş iOS 5 SDK altında çalışıyorum. Bu benim kodundan bir özü: Ben bloğu çağırmak ve hata ateşlendiğinde Nihayet

[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]; 

cevap

3

You I bloğu saklamak için çalıştı

#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 

bloğu dönüştürülebilir tür olarak kaydedemezsiniz. Apple documentation dönüştürülebilir nesnesine göre NSData'ya dönüştürülebilir olmalıdır. Blok, derlenecek kodlar için bir derleyicinin başvurusu olduğundan, taşınabilecek bazı verilerden dolayı NSData'ya dönüştürülemez.

Sadece bir not, bloğun anonim bir yöntem gibi olduğunu. Her seferinde farklı bir parametreyle defalarca çağırabilirsiniz. Yani hiçbir şey bloğu bir kez saklamaktan ve her bir zaman uyumsuz çağrıya ayrı ayrı çağırmaktan hiç bir şey durmuyor. Çok fazla bloğa ihtiyacınız olduğunu düşünüyorsanız, büyük olasılıkla her bir blok çağrısına geçirilmesi gereken verileri saklamanız gerekir.

İlgili konular