Ios NSInvalidArgumentException生成按钮网格后获取属性值
我希望这不是一个重复的问题。我找了一些类似的东西,但找不到任何东西,错误信息非常模糊,因此可能会导致重复的问题 我有一个接收自定义对象的视图控制器。.h文件如下所示:Ios NSInvalidArgumentException生成按钮网格后获取属性值,ios,objective-c,Ios,Objective C,我希望这不是一个重复的问题。我找了一些类似的东西,但找不到任何东西,错误信息非常模糊,因此可能会导致重复的问题 我有一个接收自定义对象的视图控制器。.h文件如下所示: #import <UIKit/UIKit.h> #import "Tile.h" @interface TilesVC : UIViewController @property (nonatomic, strong) Tile *tileToFind; @end #import "TilesVC.h" #de
#import <UIKit/UIKit.h>
#import "Tile.h"
@interface TilesVC : UIViewController
@property (nonatomic, strong) Tile *tileToFind;
@end
#import "TilesVC.h"
#define kButtonColumns 26
#define kButtonRows 36
@interface TilesVC ()
{
UIButton *buttons[kButtonColumns][kButtonRows];
}
@end
@implementation TilesVC
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"tile = %@", self.tileToFind.tile_personName);
[self generateTiles];
NSLog(@"tile = %@", self.tileToFind.tile_personName);
}
- (void)generateTiles
{
NSInteger intTagNumber = 0;
NSInteger intXTile;
NSInteger intYTile;
float tileWidth = self.view.bounds.size.width / kButtonColumns;
float tileHeight = self.view.bounds.size.height / (kButtonRows + 1);
char char_x = 'A';
for (int x = 0; x < kButtonColumns; x++)
{
for (int y = 1; y <= (kButtonRows + 1); y++)
{
intXTile = x * tileWidth;
intYTile = y * tileHeight;
// create a value button, text, or image
buttons[x][y] = [[UIButton alloc] initWithFrame:CGRectMake(intXTile, intYTile, tileWidth, tileHeight)];
[buttons[x][y] setBackgroundImage:[UIImage imageNamed:@"square_black"] forState:UIControlStateNormal];
[buttons[x][y] setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
buttons[x][y].adjustsImageWhenHighlighted = NO;
buttons[x][y].adjustsImageWhenDisabled = NO;
buttons[x][y].tag = intTagNumber;
buttons[x][y].enabled = NO;
[self.view addSubview:buttons[x][y]];
intTagNumber++;
}
char_x ++;
}
}
当第二个日志执行时,tileToFind
为nil
你知道为什么调用generateTiles
方法后属性变为nil吗
编辑
tileToFind变量在上一个/不同的视图控制器上分配:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier]isEqualToString:@"segueSearchToTile"])
{
Tile *tileFound = (Tile *)sender;
TilesVC *tvc = [segue destinationViewController];
tvc.tileToFind = tileFound;
}
}
谢谢。此错误表示您的
titletofid
属性已被分配UIButton
实例,而不是Title
实例。你把self.titleToFind分配到哪里?我修改了这个问题,把分配也包括进去了。谢谢这是你的问题<代码>发件人是一个ui按钮
,而不是标题
。使用cast并不能改变这个事实,但我这样称呼它:Tile*tileFound=[self-findTileByPersonID:self.textField_-id.text];[self-PerformsgueWithIdentifier:@“segueSearchToTile”发件人:tileFound];即使是这样,为什么会因为生成大量按钮而起作用?
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier]isEqualToString:@"segueSearchToTile"])
{
Tile *tileFound = (Tile *)sender;
TilesVC *tvc = [segue destinationViewController];
tvc.tileToFind = tileFound;
}
}