【问题标题】:Xcode: CoreData generated property is "double" instead of "NSNumber"Xcode:CoreData 生成的属性是“double”而不是“NSNumber”
【发布时间】:2019-09-02 12:40:11
【问题描述】:

我在使用 CoreData 时遇到问题: 数据模型有多个类型为Double的字段:

所以,我希望生成的 CoreData 属性具有相同的类型,但是,它们不是:

@property (nullable, nonatomic, copy) NSNumber *amount;
@property (nonatomic) double iccsMaterialAmountIfDifferentThanPlanItem;

这种行为的根本原因是什么,是错误吗?如果是,如何解决?

【问题讨论】:

  • 在数据模型检查器中的 use scalar type 中设置复选标记。

标签: ios objective-c core-data


【解决方案1】:

这是 Xcode 自动生成类的默认行为,您可以在属性上选择 Use scalar type 来更改它:

来自doc

使用标量类型(可选)对于某些类型,在标量和 代码生成期间的非标量表示。对于双人间, 选择 Use Scalar 复选框会产生一个 Double,同时离开它 unselected 产生一个 NSNumber。有关类型的完整列表,包括 标量变体,请参阅 NSAttributeType。

【讨论】:

    【解决方案2】:

    根据我们的经验,数字模型和 plist 数据类型是没有意义的。他们都是NSNumber。在您的代码中,您必须将这些读取为 NSNumber,然后转换为 int、double、float 或 string。至少在目标 C 中。

    这里是一个数字到字符串转换的例子:

    
    + (NSString *) numberToString:(NSNumber *)dbNumberIn{
    
        NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
    
        formatter.numberStyle = NSNumberFormatterDecimalStyle;
        formatter.formatWidth = 5;
        formatter.paddingCharacter = @"   ";
        formatter.maximumIntegerDigits  = 6;
        formatter.minimumFractionDigits = 2;
        formatter.maximumFractionDigits = 2;
        formatter.usesSignificantDigits = NO;
        formatter.usesGroupingSeparator = YES;
        formatter.groupingSeparator = @",";
        formatter.decimalSeparator = @".";
    
        NSString *stringFieldOut = [formatter stringFromNumber:dbNumberIn];
    
        return stringFieldOut;
    }
    

    【讨论】:

      猜你喜欢
      • 2021-06-25
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 2013-07-10
      • 1970-01-01
      • 1970-01-01
      • 2016-11-22
      • 2011-10-19
      相关资源
      最近更新 更多