【问题标题】:Problems with Float on core-data核心数据上的浮点问题
【发布时间】:2023-04-03 13:15:01
【问题描述】:

以下代码很大程度上受我在网上找到的一些示例的启发,似乎工作正常,核心数据实体名为“Contact”,名为“address”的属性在 xcdatamodel 中具有属性字符串。它可以毫无问题地保存我的数据。 现在我的问题是:我需要如何修改这段代码?为了在我将xcdatamodel中的属性“address”的属性从String更改为Float后使其工作。

CoreDataTestOneAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 
NSManagedObjectContext *context = [appDelegate managedObjectContext];
NSManagedObject *newContact;
newContact = [NSEntityDescription insertNewObjectForEntityForName:@"Contacts" inManagedObjectContext:context];
[newContact setValue:address_InputField.text forKey:@"address"];
NSError *error;
[context save:&error];

【问题讨论】:

    标签: iphone ios core-data ios4 ipad


    【解决方案1】:

    要将浮点数存储在 Core Data 的浮点属性中,请将其包装在 NSNumber 对象中,如下所示:

    [newContact setValue:[NSNumber numberWithFloat:floatValue] forKey:@"address"];
    

    【讨论】:

    • 谢谢,但是如何为您的“floatValue”编写代码?我的浮点值已由用户在 address_InputField 中输入,这是一个 UITextField。
    • 在文档中了解 NSNumberFormatter,也请务必检查您的语言环境(以便正确解析分隔符,如 , 或 。)代码应类似于 NSNumberFormatter *numFormatter = [[[NSNumberFormatter alloc]初始化]自动释放]; NSNumber *yourNumber = [numFormatter numberFromString:textField.text];
    • 我试过 [newContact setValue:[NSNumber numberWithFloat:[address_InputField.text floatValue]] forKey:@"address"];但它失败了。在调试器下,这行似乎是: NSManagedObjectContext *context = [appDelegate managedObjectContext];失败。我不知道为什么会这样。
    • 尝试删除旧模型存储。如果您周围有一个具有旧对象模型(模式)的人,那么您可能会在没有迁移策略的情况下尝试打开该商店时遇到麻烦。您可能还想进行干净的重建。
    【解决方案2】:

    这是一个猜测,但我认为您需要将该浮点数包装在一个 NSNumber 中。 numberWithFloat:

    Creates and returns an NSNumber object containing a given value, treating it as a float.
    
    + (NSNumber *)numberWithFloat:(float)value
    

    【讨论】:

      猜你喜欢
      • 2015-05-20
      • 2011-07-03
      • 1970-01-01
      相关资源
      最近更新 更多