【问题标题】:NSManagedObject [User setUsername:]: unrecognized selector sent to instanceNSManagedObject [User setUsername:]:发送到实例的无法识别的选择器
【发布时间】:2012-12-06 03:25:59
【问题描述】:

我有一个使用 CoreData 的应用程序。我为 CoreData 中的两种对象类型创建了 NSManagedObjects。当我尝试使用该对象并在该对象上设置一个属性时,编译器会显示“[User setUsername:]: unrecognized selector sent to instance”。不管我什么属性,[User setValue],试一试总是不识别?

User *joeBlow = [[User alloc] init];
[joeBlow setUsername:@"joeblow"];

或 用户 *joeBlow = [[用户分配] init]; joeBlow.username = @"JoeBlow";

两者都给出“无法识别的选择器发送到实例”

下面是我的 USER 代码:

用户.h

@interface User : NSManagedObject

  @property (nonatomic, retain) NSString * address1;
  @property (nonatomic, retain) NSString * username;
  @property (nonatomic, retain) NSString * zip;
  @property (nonatomic, retain) NSString * email;

@end

用户.m

@implementation User

  @dynamic address1;
  @dynamic username;
  @dynamic zip;
  @dynamic email;

@end

【问题讨论】:

    标签: objective-c core-data


    【解决方案1】:

    您不能通过普通的alloc-init 模式创建 Core Data 实体的新实例(与其他类不同)。相反,调用 NSEntityDescription 上的类方法:

    User *joeBlow = [NSEntityDescription 
                     insertNewObjectForEntityForName:@"User"
                     inManagedObjectContext:self.managedObjectContext];
    [joeBlow setUsername:@"joeblow"];
    

    有关详细信息,请参阅 Apple 的 Core Data Programming Guide

    最后,请注意[jb setUsername:@"jb"]jb.username = @"jb" 是相同的——后者是点符号,是前者的不同表达方式。

    【讨论】:

      【解决方案2】:

      这个正确答案不再正确。看这里。

      https://github.com/RestKit/RestKit

      Article *article = [Article new];
      article.title = @"Introduction to RestKit";
      article.body = @"This is some text.";
      article.author = @"Blake";
      
      // POST to create
      [manager postObject:article path:@"/articles" parameters:nil success:nil failure:nil];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-28
        • 2012-07-24
        相关资源
        最近更新 更多