0

別のクラスで設定される NSManagedObject にアクセスする必要があるため、次のようなシングルトンを作成してみました。

MyManager.h

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

@interface MyManager : NSObject {
    NSManagedObject *someProperty;
}

@property (nonatomic, retain) NSManagedObject *someProperty;

+ (id)sharedManager;

@end

MyManager.m

#import "MyManager.h"

@implementation MyManager

@synthesize someProperty;

#pragma mark Singleton Methods

+ (id)sharedManager {
    static MyManager *sharedMyManager = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedMyManager = [[self alloc] init];
    });
    return sharedMyManager;
}

- (id)init {
    if (self = [super init]) {
        someProperty = nil;
    }
    return self;
}

- (void)dealloc {
    // Should never be called, but just here for clarity really.
}

@end

私はこのように1つのクラスに設定しました:

MyManager *sharedManager = [MyManager sharedManager];
sharedManager.someProperty = self.form;

しかし、ログに記録するとnullです

NSLog(@"shared::%@", sharedManager.someProperty);

シングルトンは初めてなので、アドバイスが必要です。

4

2 に答える 2

0

コア データでは、単にプロパティを設定することはできません。特定のエンティティに新しいオブジェクトを挿入するか、それをフェッチして、フェッチしたオブジェクトを使用してプロパティを設定します。「設定」を行っているときに、挿入またはフェッチによって nsmanagedobject を作成したことを願っています。そうでない場合は、それが null の理由である可能性があります。

 NSManagedObject *someEntity = [NSEntityDescription insertNewObjectForEntityForName:@"someEntity" inManagedObjectContext:context];
 //after this
 someEntity.stringProperty = @"Blablabla";
于 2013-11-14T15:14:17.523 に答える