在 iPhone 应用程序中分配 NSInteger 属性

Posted

技术标签:

【中文标题】在 iPhone 应用程序中分配 NSInteger 属性【英文标题】:Assigning NSInteger property in iPhone App 【发布时间】:2012-08-29 19:37:45 【问题描述】:

我在 SQLite 中有一个表,我想在该表中插入数据。该表有responses_id、participant_id、answer_text、answer_option_update_date_time。 response_id 和participant_id 是整数。当我将任何东西分配给参与者 ID 时,它会给出错误,对象不能设置为属性。

@interface Coffee : NSObject 

NSInteger coffeeID;
NSInteger participant_Id;

NSString*question_Id;
NSString*answer_option;
NSString*answer_text;
NSString*update_date_time;




//Intrnal variables to keep track of the state of the object.


@property (nonatomic, readonly) NSInteger coffeeID;
@property (nonatomic, retain) NSInteger participant_Id;

@property (nonatomic, copy) NSString *question_Id;
@property (nonatomic, copy) NSString *answer_option;
@property (nonatomic, copy) NSString *answer_text;
@property (nonatomic, copy) NSString *update_date_time;


- (void)save_Local 
    CereniaAppDelegate *appDelegate = (CereniaAppDelegate *)[[UIApplication sharedApplication] delegate];

    Coffee *coffeeObj = [[Coffee alloc] initWithPrimaryKey:0];

    coffeeObj.participant_Id=mynumber;

    NSString*question="1";
    coffeeObj.question_Id=question;
    coffeeObj.answer_option=selectionAnswerOption;
    coffeeObj.answer_text=professionTextField.text;




    NSDate* date = [NSDate date];
    NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd HH:MM:SS"];
    NSString* str = [formatter stringFromDate:date];

    UPDATE_DATE_TIME=str;


    coffeeObj.update_date_time=UPDATE_DATE_TIME;

    //Add the object
    [appDelegate addCoffee:coffeeObj];  

当我为参与者 ID 赋值时,它会报错。

【问题讨论】:

【参考方案1】:

NSInteger 不是一个类,它是一个基本类型,如intlong。在 ios 上,NSIntegertypedefed 到 int,在 OS X 上是 typedefed 到 long。因此,您不应该尝试retainNSInteger。您应该将您的属性声明更改为:

@property (nonatomic, assign) NSInteger participant_Id;

coffeeID 属性也是如此。

【讨论】:

如果您确实希望它成为一个对象,您可以将其包装在 NSNumber 中。 没问题。人们通常会认为 NSIntegerNSUInteger 是类。 以及如何将值传递给类?

以上是关于在 iPhone 应用程序中分配 NSInteger 属性的主要内容,如果未能解决你的问题,请参考以下文章

为啥我们可以直接在ByteBuffer中分配字节而不在FloatBuffer中分配浮点数

在 Java 中分配大量数组时避免内存碎片

在 32 位 .NET 进程中分配超过 1,000 MB 的内存

在 if 语句 c# 中分配变量

查找程序中分配的内存? [复制]

如何在清单中分配 android:sharedUserId?