[英]Objective-C dot syntax or property value?
我一直在閱讀點語法是可能的,但我不斷得到結構不包含我引用的成員的錯誤。 也許它不是點語法,所以我已經包含了我正在做的細節,希望有一個解決方案:
// 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!
您需要強制轉換-objectAtIndex:返回的對象,或者對其使用方法調用:
[[mobInfo objectAtIndex: 0] setMName: @"doug"];
要么
((Mobrec *) [mobInfo objectAtIndex: 0]).MName = @"doug";
[mobInfo objectAtIndex:0 setmName:@“doug”];
沒有objectAtIndex:setmName方法,所以你將不得不解釋你認為這甚至應該做什么。
mobInfo [1] .MName = @“eric”;
使用objectAtIndex在NSArray對象中查找內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.