作者spitfires221 (劉)
看板MacDev
標題Re: [問題] Objective-C超新手問題請教 怎麼用class
時間Mon Oct 29 00:33:00 2012
※ 引述《stu87616 (以光為名)》之銘言:
: 也是最近才入手一台MAC,本來就很想試試寫iOS的程式,
: 所以也不廢話的裝了Xcode,買了一本Objective-C的書來看,
: 不過看完以後發現這本書大部分都在講Objective-C的語法(廢話)
: 實際上用到iOS上還有點差距(好像java和Android一樣),
: 於是我實際開始用Xcode寫iPhone的時候發生很多無法理解的問題...
: 最基本的使用一個class,我也只是想測試一下要怎麼用而已,
: 很簡單但是什麼都沒出來...我的專案是這樣:
: 開一個Single View,然後新增一個Objective-C Class classtest
: classtest.h是這樣:
: #import <Foundation/Foundation.h>
: @interface classtest : NSObject
: @property NSString *name;
: @property int number;
: @end
: classtest.m是這樣:
: #import <"classtest.h">
: @implementation classtest
: @synthesize name, number;
: @end
: 主程式ViewController.h是這樣:
: #import <UIKit/UIKit.h>
: #import "classtest.h"
: @interface ViewController : UIViewController
: @property (strong, nonatomic) IBOutlet UILabel *show;
: -(IBAction)btn:(id)sender;
: @property classtest @classer;
: @end
: ViewController.m是這樣:
: #import "ViewController.h"
: //稍略
: @synthesize show, classer;
: -(IBAction)btn:(id)sender
: {
: show.text = classer.name;
: }
: //下略,在load裡面有給classer.name值
: 大概是這樣,很簡單的一個小專案而已,
: View上有一個Label(show)和Button(btn)
: 照理來說按下btn就會讓show的text為classer的name,
: 但我這樣寫按下去會什麼都沒有QQ show直接變空的,
: 我也有嘗試過讓class有初始值,但仍然什麼都沒出來...
: 讓我百思不得其解,程式看起來好像是認不得這個class,
: 但編譯又能通過,說明應該是沒問題的啊...
: 只好來板上問問看...這好像是基本到不行的問題...拜託各位了orz
修改二個項目試試看
1) @property classtest @classer; 改為 @property classtest *classer;
2) 加下面的code到 ViewController.m
- (void) classer
{
if(classer==nil) classer =[[classtest alloc] init];
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 101.10.116.157
推 stu87616:第一項是我的筆誤抱歉ˊ_ˋ..我原本就是*classer沒錯 10/29 00:58
→ stu87616:第二項加了以後仍然沒有... 10/29 01:00
推 stu87616:啊我成功了! 原來是我沒有分配記憶體給class 10/29 01:02
→ stu87616:我直接把[[classtest alloc] init]寫在load裡就有了!! 10/29 01:03
→ stu87616:感謝QQ 10/29 01:03
→ g4530:你沒寫成物件的話(或者說初始化),它的有效範圍就只有原本的 10/29 12:48
→ g4530:method.我猜你可能是直接classer.name=@"testClassName"; 10/29 12:49
→ g4530:這樣它出了loadView,就沒人看得懂了,除非你有另外的object去 10/29 12:50
→ g4530:接 10/29 12:50
推 stu87616:對 差不多是這樣 我大概懂了 10/29 22:33
→ stu87616:另外我現在也是把初始化寫在loadView裡面 目前使用正常 10/29 22:33
→ stu87616:另外我現在也是把初始化寫在loadView裡面 可能是以前語 10/29 22:34
→ stu87616:言用慣了 總覺得new這樣的動作應該在宣告的時候就把他搞 10/29 22:35
→ stu87616:定才對 像是classtest *classer=[[classtest alloc]init] 10/29 22:35
→ stu87616:這樣 比較清爽(?) 不過Objective-C似乎不是這樣的風格 10/29 22:36