作者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
1F:推 stu87616:第一项是我的笔误抱歉ˊ_ˋ..我原本就是*classer没错 10/29 00:58
2F:→ stu87616:第二项加了以後仍然没有... 10/29 01:00
3F:推 stu87616:啊我成功了! 原来是我没有分配记忆体给class 10/29 01:02
4F:→ stu87616:我直接把[[classtest alloc] init]写在load里就有了!! 10/29 01:03
5F:→ stu87616:感谢QQ 10/29 01:03
6F:→ g4530:你没写成物件的话(或者说初始化),它的有效范围就只有原本的 10/29 12:48
7F:→ g4530:method.我猜你可能是直接classer.name=@"testClassName"; 10/29 12:49
8F:→ g4530:这样它出了loadView,就没人看得懂了,除非你有另外的object去 10/29 12:50
9F:→ g4530:接 10/29 12:50
10F:推 stu87616:对 差不多是这样 我大概懂了 10/29 22:33
11F:→ stu87616:另外我现在也是把初始化写在loadView里面 目前使用正常 10/29 22:33
12F:→ stu87616:另外我现在也是把初始化写在loadView里面 可能是以前语 10/29 22:34
13F:→ stu87616:言用惯了 总觉得new这样的动作应该在宣告的时候就把他搞 10/29 22:35
14F:→ stu87616:定才对 像是classtest *classer=[[classtest alloc]init] 10/29 22:35
15F:→ stu87616:这样 比较清爽(?) 不过Objective-C似乎不是这样的风格 10/29 22:36