NSManagedObject属性为null

时间:2012-07-31 17:49:25

标签: iphone core-data

我有一个UIButton子类,我在其中将属性concert设置为NSManagedObject的子类。当我设置此属性时,我确信NSManagedObject不为null,并且它的属性不为null。此外,对象的数据显示正确的数据。

稍后在点击按钮时使用concert并将其作为sender发送给方法时,我会将sender强制转换为UIButton的子类和属性concert现在将返回null,但concert本身不为null。此外,数据将为fault

有谁知道为什么会发生这种情况以及如何解决这个问题?

在这里,我初始化我的按钮:

NFConcertButton *button = [NFConcertButton buttonWithConcert:concert tileSize:self.tileSize];

initWithButton:tileSize:(由静态方法调用)中,我存储音乐会供以后使用。

- (id)initWithConcert:(NFConcert *)concert tileSize:(CGSize)tileSize
{
    if (self = [super init])
    {
        // Store concert
        _concert = concert;

       /*
         <NFConcert: 0xde67eb0> (entity: Concert; id: 0xde63f60 <x-coredata://F027F762-2F30-4A43-898B-42ECC199DE97/Concert/p2> ; data: {
           band = "SomeBand";
         })
        */

        // concert is not null
        // concert.band is not null

        // .... //
    }

    return self;
}

按下按钮时,将调用以下方法,concert的属性现在为空。

- (void)concertButtonPressed:(id)sender
{
    NFConcert *concert = ((NFConcertButton *) sender).concert;
    // <NFConcert: 0xde67eb0> (entity: Concert; id: 0xde63f60 <x-coredata://F027F762-2F30-4A43-898B-42ECC199DE97/Concert/p2> ; data: <fault>) => (null)
    // concert is not null.
    // concert.band is now null.
}

更新

如果我使用NSManagedObject再次获取objectId,我将获取数据,并且属性不会返回null。我不明白为什么这是必要的。有谁能告诉我?

以下内容可行。

NFConcert *concert = ((NFConcertButton *) sender).concert;
concert = (NFConcert *) [managedObjectContext existingObjectWithID:concert.objectID error:nil];

1 个答案:

答案 0 :(得分:1)

使用Apples默认的Core Data堆栈实现,我不再有这个问题。 我相信这个问题是由我曾经使用过核心数据堆栈的DataManager引起的。