みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Objective-C[NSMutableStringクラスについて]

Objective-C[NSMutableStringクラスについて]

はじめまして。
NSMutableStringクラスで宣言したインスタンスをどこからでも呼び出したいと思い
以下のコードを作りました。

NSMutableString extern *Mixbox;

-(IBAction)TestTime:(id)sender{
NSString *Time=@"ただいまの時間\n ";

NSDate *date=[NSDate date];//時間の設定
NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];
[formatter setDateFormat:@"yyyy:MM:dd::hh:mm:ss"];
NSString *str = [formatter stringFromDate:date];

[Mixbox appendString:str];
[Mixbox appendString:Time];

self.flowView.text=(@"%@",Mixbox);

}

ビルドするとエラーになります。
どこからでもインスタンスを呼び出したい場合どのようにすれば良いのでしょうか?
回答をお願いします。

投稿日時 - 2010-10-02 21:16:37

QNo.6223235

すぐに回答ほしいです

質問者が選んだベストアンサー

> @interface

ここに、「-(IBAction)testtime:(id)sender;」を記述してください。Interface Builderと連携できません。

> Mixbox=[NSMutableString string];

これはイニシャライザの中に記述しなければなりません。
ただし、UIViewControllerのサブクラスの場合は、「- (void)viewDidLoad」の中に記述します。
そして「retain」するか、「[[NSMutableString alloc] init]」で初期化してください。「[NSMutableString string]」は、autoreleaseになります。autoreleaseにしたインスタンスは、Cの関数、Objective -Cのメソッド内のみで有効と考えてください。

- (void)viewDidLoad {
[super viewDidLoad];
mixBox = [NSMutableString string];
[mixBox retain];
}

このように訂正して、なおエラーが出るのでしたら、あなたが今回端折ったコードのどこかに問題が潜んでいます。

> どのIBAction型でも呼び出せるようにしたいのですが。

「IBAction」は、型ではありません。Interface Builderが、Actionとして認識するための目印に過ぎません。コンパイル時には、「void」と同義として扱われます。同様に「IBOutlet」は、コンパイル時スペースと同義です。

投稿日時 - 2010-10-03 02:12:52

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

> 何がいけないのか教えてください。

質問文に記述されたコードを訂正したもの全体を、記載してください。そうでなければ、こちらからチェックしようがありません。

投稿日時 - 2010-10-03 00:23:33

補足

すいません。
このように書いてみました。

h
@interface FirstViewController :UIViewController
{

NSMutableString *Mixbox;
}

m

@implementation FirstViewController

Mixbox=[NSMutableString string];

-(IBAction)testtime:(id)sender{
NSString *Time=@"ただいまの時間\n ";

NSDate *Date=[NSDate date];//時間の設定
NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];
[formatter setDateFormat:@"yyyy:MM:dd::hh:mm:ss"];
NSString *Str = [formatter stringFromDate:Date];

[Mixbox appendString:Str];
[Mixbox appendString:Time];

self.flowView.text=Mixbox;

}

どのIBAction型でも呼び出せるようにしたいのですが。

投稿日時 - 2010-10-03 00:47:12

ANo.1

ヘッダファイルの@interfaceに、NSMutableString *Mixboxを宣言してください。それでクラス内のどこからでも呼び出せるようになります。

※インスタンス名は、クラス名と区別するため、小文字で始めることがルールになっています。対してクラス名は大文字で始めます。
また、メソッド名も小文字で始めるルールになっているので、「-(IBAction)TestTime:(id)sender」も適切ではありません。

NSMutableStringに限らず、インスタンスは宣言しただけでは生成されていないので、イニシャライザを使って、生成、初期化を最初にしなければなりません。いちばんかんたんなイニシャライザは、「Mixbox = [NSMutableString string];」です。これで、空のテキストからなるMixboxが生成されます。

> self.flowView.text=(@"%@",Mixbox);

この行のイコール以降は、「[NSString stringWithFormat: @"%@", Mixbox]」としなければいけませんが、単に「self.flowView.text = Mixbox」とすればいいものを、どうして回りくどい記述をする必要があるのでしょう?

投稿日時 - 2010-10-02 22:54:14

補足

Cの扱い方に馴染んでおり
そのような書き方になってしまいます。

投稿日時 - 2010-10-02 23:56:46

お礼

ルールまで教えていただきありがとうございます。

NSMutableString *Mixboxを@interfaceのあとに宣言を行い
そのあと、初期化 Mixbox = [NSMutableString string];を入力したのですが
エラーとなります。
何がいけないのか教えてください。

投稿日時 - 2010-10-03 00:07:35

あなたにオススメの質問