0

最初からやり直す。私はObjectiveCにかなり慣れていません。次のクラスを作成しましたが、配列を初期化する方法がわかりません。

NSArrayを初期化する方法について誰かがガイダンスを提供できますか?

StatusPost.m

#import "StatusPost.h"


@implementation StatusPost

@synthesize messageId, fromName, friendId, message, choice2, choice3, choice4, picture,     fbImage, commentCount, commentArray;

-(id)initWithMessageId:(NSString*) rMessageId 
       fromName:(NSString*) rFromName
         friendId:(NSString*) rFriendId
        message:(NSString*) rMessage 
           choice2:(NSString*) rChoice2
           choice3:(NSString*) rChoice3
           choice4:(NSString*) rChoice4
           picture:(NSString *) rPicture
           fbImage:(UIImage *)rfbImage
      commentCount:(NSString*) rCommentCount
      commentArray:(NSArray*) rCommentArray
{
if (self = [super init]) {
    commentArray = [NSArray new];
    self.messageId = rMessageId;
    self.fromName = rFromName;
    self.friendId = rFriendId;
    self.message = rMessage;
    self.choice2 = rChoice2;
    self.choice3 = rChoice3;
    self.choice4 = rChoice4;
    self.picture = rPicture;
    self.fbImage = rfbImage;
    self.commentCount = rCommentCount;
    self.commentArray = rCommentArray;

}
return self;
}



- (void)dealloc {
[messageId release];
[fromName release];
[friendId release];
[message release];
[picture release];
[fbImage release];
[commentCount release];
[commentArray release];
[super dealloc];
}

@end

StatusPost.h:#import

@interface StatusPost : NSObject {
NSString* messageId;
NSString* fromName;
NSString* friendId;
NSString* message;
NSString* choice2;
NSString* choice3;
NSString* choice4;
NSString* picture;
UIImage* fbImage;
NSString* commentCount;
NSArray* commentArray;

}

@property (nonatomic, retain) NSString* messageId;
@property (nonatomic, retain) NSString* fromName;
@property (nonatomic, retain) NSString* friendId;
@property (nonatomic, retain) NSString* message;
@property (nonatomic, retain) NSString* choice2;
@property (nonatomic, retain) NSString* choice3;
@property (nonatomic, retain) NSString* choice4;
@property (nonatomic, retain) NSString* picture;
@property (nonatomic, retain) UIImage* fbImage;
@property (nonatomic, retain) NSString* commentCount;
@property (nonatomic, retain) NSArray* commentArray;


-(id)initWithMessageId:(NSString*) rMessageId 
       fromName:(NSString*) rFromName
         friendId:(NSString*) rFriendId
        message:(NSString*) rMessage
           choice2:(NSString*) rChoice2
           choice3:(NSString*) rChoice3
           choice4:(NSString*) rChoice4
           picture:(NSString*) rPicture
           fbImage:(UIImage*) rfbImage
      commentCount:(NSString*) rCommentCount
      commentArray:(NSArray*) rCommentArray;

@end
4

2 に答える 2

0

[NSArray new]はの省略形で[[NSArray alloc] init]あるため、技術的に言えば、そのステートメントはNSArrayを「初期化」します。

ただし、コードは少し変わっているように見えます。次のステートメントがありますinit

commentArray = [NSArray new];
self.commentArray = rCommentArray;

最初のステートメントは、インスタンス変数commentArrayを新しく割り当てられた/初期化されたNSArrayのアドレスに設定し、2番目のステートメントはプロパティcommentArrayをパラメーター値に設定します。ただし、(を介して@synthesize)インスタンス変数commentArrayをプロパティの「バッキングストア」にしたcommentArrayため、2行目を実行すると、最初の行の効果が上書きされます(作成したNSArrayは「リーク」されます)。

(ただし、実際の質問がNSArrayに値を「ロード」する方法である場合は、その質問をする必要があります。そうすれば、さまざまな回答が得られます。)

于 2012-08-11T03:27:05.943 に答える
0

配列を初期化していない可能性が高いため、オブジェクトを追加しようとすると、メッセージが nil に送信されるだけです。カスタム クラスのinitメソッドで、次の行を追加します。

commentArray = [NSMutableArray new];
于 2012-08-11T01:53:08.937 に答える