【问题标题】:Value of an integer variable in one view always showing 0(ZERO) in another view一个视图中整数变量的值在另一个视图中始终显示 0(零)
【发布时间】:2011-02-21 12:58:16
【问题描述】:

我想将一个视图按钮的标签值访问到另一个视图,但它总是显示为零。

我声明一个整数变量:NSInteger 标签;在 songView.h 的接口部分并设置其 @property(nonatomic) NSInteger 标签; 在 songView.m 中将其合成为 @synthesize 标签; 现在我为它分配按钮的标签值,如下所示:

-(IBAction)track1ButtonPressed:(id) sender
{
 self.tag = [sender tag];
}

现在我想在另一个视图中访问这个(标签)值,即 audioView,我在 audioView.m 中这样编码:

songView *songview=[songView alloc];
if (songview.tag==1)
{}
else{}

通过运行此代码,总是执行其他部分,因为 songview.tag 的值为 0(零), 我还在IB中将button的tag值设置为1。

【问题讨论】:

  • [songView alloc]; - 但 init 在哪里?为什么看在老天的份上songview.tag 在它被初始化的下一个字符串应该等于 1?
  • becoz标签是songview中按钮的标签属性,我在IB中设置了1。

标签: iphone objective-c


【解决方案1】:

尝试用标签以外的其他名称声明整数变量..ex: NSInteger btnTag; 因为通常对于任何视图,标签都是零

【讨论】:

  • 这是正确的,但您可以在子类中重新定义@property,只要您扩展其范围即可。所以这应该没问题,尽管没有必要。
  • 仍然显示 0(零),在它自己的视图中它的值为 0。表示 -(IBAction)track1ButtonPressed:(id) sender { self.tag = [sender tag]; } self.tag 值为 0。
  • 再次检查您的按钮标签。尝试在调试器控制台中打印它
  • 我试过了。现在它在自己的视图中打印正确的值意味着 self.bttag 的值是正确的,但在第二个视图中,即在 songView *songview=[songView alloc]; if (songview.bttag==1) {} else{} 它再次打印“songview.tag”的值 0(零)。
  • 我认为在 songView 中您是在 viewdidload 函数中分配 btn 标签,对吗?在 '- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil' 函数中执行这些操作.. & SongView *sv=[[SongView alloc]init]; NSLog (@"%i",sv.btn.tag);试试这个
【解决方案2】:

首先,你不仅要分配你的对象,还要初始化它。所以替换

songView *songview=[songView alloc];

CGRect songFrame = CGRectMake(0.f, 0.f, 120.f, 120.f);
songView *songview=[[songView alloc] initWithFrame:songFrame];

initWithFrameUIView 的指定初始化程序,我想您的 songView 类是 UIView 的子类。

那么我不确定assign 是否是@property 的默认修饰符,以确保将您的标记属性定义为

@property(nonatomic, assign) NSInteger tag;

那么它应该可以工作。如果没有,请在 track1ButtonPressed:(id) sender 方法中设置断点以查看它是否被调用并使用调试器手动检查 sender 对象。

【讨论】:

  • 仍然显示 0(零),在它自己的视图中它的值为 0。表示 -(IBAction)track1ButtonPressed:(id) sender { self.tag = [sender tag]; } self.tag 值为 0。
  • 那么发件人呢?它是正确的对象吗?尝试在 gdb 控制台中输入po sender 并检查它是否是正确的视图。
  • 不知道如何将po sender输入gdb控制台,查看是否是正确的视图。实际上我是 iPhone 的新手,所以请指导我。
  • 按照我的回答设置断点。当程序在断点处停止时,打开控制台,可以在运行菜单中找到,输入po senderpo代表打印对象,调用指定对象的描述方法。如果返回 0,则发送者为 nil。
猜你喜欢
  • 2010-12-21
  • 2012-04-22
  • 1970-01-01
  • 1970-01-01
  • 2019-11-10
  • 2021-09-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-10
相关资源
最近更新 更多