Ios NSInvalidArgumentException生成按钮网格后获取属性值

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

我希望这不是一个重复的问题。我找了一些类似的东西,但找不到任何东西,错误信息非常模糊,因此可能会导致重复的问题

我有一个接收自定义对象的视图控制器。.h文件如下所示:

#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;
    }
}