看板 MacDev 關於我們 聯絡資訊
※ 引述《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