加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Objective-C点语法或属性值?

发布时间:2020-12-16 10:16:08 所属栏目:百科 来源:网络整理
导读:我一直在阅读点语法是可能的,但我不断得到结构不包含我引用的成员的错误.也许它不是点语法,所以我已经包含了我正在做的细节,希望有一个解决方案: // MobRec.h - used as the objects in the MobInfo array#import Foundation/Foundation.h@interface MobRec
我一直在阅读点语法是可能的,但我不断得到结构不包含我引用的成员的错误.也许它不是点语法,所以我已经包含了我正在做的细节,希望有一个解决方案:

//  MobRec.h - used as the objects in the MobInfo array
#import <Foundation/Foundation.h>

@interface MobRec : NSObject {
@public NSString *mName;        
     @public int mSpeed;
}

@property (nonatomic,retain) NSString *mName; 
@property (nonatomic) int mSpeed;

// MobDefs.h - array of MobRecords
@interface Mobdefs : NSObject {
@public NSMutableArray *mobInfo;
}

@property(assign) NSMutableArray *mobInfo;  // is this the right property?

-(void) initMobTable;

@end

// MobDefs.m
#import "Mobdefs.h"
#import "Mobrec.h"
@implementation Mobdefs
@synthesize mobInfo;

-(void) initMobTable 
{
    // if I use traditional method I get may not respond 
    [mobInfo objectAtIndex:0 setmName: @"doug"];

    // if I use dot syntax I get struct has no member named mName 
    mobInfo[1].MName = @"eric";
}

// main.h
MobDefs *mobdef;

// main.m 
mobdef = [[Mobdefs alloc] init];
[mobdef initMobTable];

虽然这两种方法都可行,但我两者都有错误.我究竟做错了什么?我最好的想法是我使用了错误的@property,但我想我已经尝试了所有.我在main执行alloc.理想情况下,我想为此使用点语法,并且无法理解为什么它不允许它.

解决方法

一些事情:(编辑:原因点#1因错误而被删除)

>虽然支持点语法,但NSArray的数组索引语法不支持.因此,您对mobInfo [1]的调用与[mobInfo objectAtIndex:1]不同;相反,mobInfo将被视为一个简单的C风格数组,并且该调用几乎可以保证导致崩溃.
>您不应像在main.h中那样在头文件中定义变量.行MobDefs * mobdef;属于main.m的某个地方.

编辑:以下是它的外观:

MobRec.h

@interface MobRec : NSObject {
    NSString *mName;        
    int mSpeed;
}

@property (nonatomic,retain) NSString *mName; 
@property (nonatomic) int mSpeed;

MobRec.m

@implementation MobRec
@synthesize mName;
@synthesize mSpeed;
@end

MobDefs.h

@interface MobDefs : NSObject {
    NSMutableArray *mobInfo;
}
@property(assign) NSMutableArray *mobInfo;
-(void) initMobTable;
@end

MobDefs.m

#import "MobDefs.h"
#import "MobRec.h"

@implementation MobDefs
@synthesize mobInfo;

-(void) initMobTable 
{
    // option 1:
    [(MobRec*)[mobInfo objectAtIndex:0] setMName:@"doug"];

    // option 2:
    (MobRec*)[mobInfo objectAtIndex:0].mName = @"eric";

    // option 3:
    MobRec *mobRec = [mobInfo objectAtIndex:0];
    mobRec.mName = @"eric";
}

main.m

MobDef *mobdef = [[MobDefs alloc] init];
[mobdef initMobTable];
...
[mobdef release]; // don't forget!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读