Re: [問題] Objective-C超新手問題請教 怎麼用class

看板MacDev作者 (劉)時間11年前 (2012/10/29 00:33), 編輯推噓3(3012)
留言15則, 2人參與, 最新討論串2/3 (看更多)
※ 引述《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

10/29 00:58, , 1F
第一項是我的筆誤抱歉ˊ_ˋ..我原本就是*classer沒錯
10/29 00:58, 1F

10/29 01:00, , 2F
第二項加了以後仍然沒有...
10/29 01:00, 2F

10/29 01:02, , 3F
啊我成功了! 原來是我沒有分配記憶體給class
10/29 01:02, 3F

10/29 01:03, , 4F
我直接把[[classtest alloc] init]寫在load裡就有了!!
10/29 01:03, 4F

10/29 01:03, , 5F
感謝QQ
10/29 01:03, 5F

10/29 12:48, , 6F
你沒寫成物件的話(或者說初始化),它的有效範圍就只有原本的
10/29 12:48, 6F

10/29 12:49, , 7F
method.我猜你可能是直接classer.name=@"testClassName";
10/29 12:49, 7F

10/29 12:50, , 8F
這樣它出了loadView,就沒人看得懂了,除非你有另外的object去
10/29 12:50, 8F

10/29 12:50, , 9F
10/29 12:50, 9F

10/29 22:33, , 10F
對 差不多是這樣 我大概懂了
10/29 22:33, 10F

10/29 22:33, , 11F
另外我現在也是把初始化寫在loadView裡面 目前使用正常
10/29 22:33, 11F

10/29 22:34, , 12F
另外我現在也是把初始化寫在loadView裡面 可能是以前語
10/29 22:34, 12F

10/29 22:35, , 13F
言用慣了 總覺得new這樣的動作應該在宣告的時候就把他搞
10/29 22:35, 13F

10/29 22:35, , 14F
定才對 像是classtest *classer=[[classtest alloc]init]
10/29 22:35, 14F

10/29 22:36, , 15F
這樣 比較清爽(?) 不過Objective-C似乎不是這樣的風格
10/29 22:36, 15F
文章代碼(AID): #1GZLuzM7 (MacDev)
文章代碼(AID): #1GZLuzM7 (MacDev)