проблема установки значения int, нераспознанный селектор отправлен на экземпляр .... iphone - PullRequest
1 голос
/ 13 июня 2011

в моем приложении я пытаюсь отправить значение типа int из одного представления в другое.Чтобы сделать это, я настраиваю кнопку навигационной панели программно и передаю ей действие из того же класса, который создает кнопку.В следующем представлении, которое будет загружаться, у меня есть свойство, которое я установлю, когда пользователь нажимает кнопку панели навигации.Проблема в том, что приложение падает, когда я устанавливаю это значение.У меня есть значение int в @property в классе h представления, и затем у меня есть @synthesize ниже строки @implementation.

Вот код для кнопки navbar, это делается вinitWithNibName метод:

UIBarButtonItem *contentsButton = [[UIBarButtonItem alloc] initWithTitle:@"Contents"                                            style:UIBarButtonItemStyleBordered target:self action:@selector(showBookContents)];


        [[self navigationItem] setRightBarButtonItem:contentsButton];
        [contentsButton release];

Вот метод, который я передаю кнопке при ее создании:

-(IBAction)showBookContents{
    BookContentsViewController *contentsViewController = [[BookContentsViewController alloc] initWithNibName:@"BookContentsViewController" bundle:nil];

    contentsViewController.selectedBookId = self.selectedBook._id;

    [[self navigationController] pushViewController:contentsViewController animated:YES];

    [contentsViewController release];

}

Здесьэто класс, который будет загружен, когда пользователь нажимает кнопку панели навигации:

@interface BookContentsViewController : UIViewController {
    int selectedBookId;
}

@property int selectedBookId;

@end

Вот реализация для вышеуказанного класса:

@implementation BookContentsViewController

@synthesize selectedBookId;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

Как видите, @property и @synthesize выглядят нормально.Вот ошибка, которую я получаю:

2011-06-13 11: 48: 42.321 BookApp [22762: 207] - [BookDescriptionViewController setSelectedBookId:]: нераспознанный селектор, отправленный экземпляру 0x4d9f070 2011-06-1311: 48: 42.323 BookApp [22762: 207] ** ** Завершение приложения из-за необработанного исключения «NSInvalidArgumentException», причина: '- [BookDescriptionViewController setSelectedBookId:]: нераспознанный селектор, отправленный экземпляру 0x4d9f070'

В чем может быть проблема, ребята?

Заранее спасибо за ваше терпение.

Ответы [ 3 ]

0 голосов
/ 13 июня 2011

попробуйте

сделайте этот выбранный BookId NSString и попробуйте.

NSString *selectedBookId;
int selectedBookIdIntegerValue;

@property(nonatomic,retain)NSString selectedBookId; 

Измените этот метод

-(IBAction)showBookContents{
    BookContentsViewController *contentsViewController = [[BookContentsViewController alloc] initWithNibName:@"BookContentsViewController" bundle:nil];

    contentsViewController.selectedBookId = [NSString stringWithFormat:@"%d",self.selectedBook._id];

    [[self navigationController] pushViewController:contentsViewController animated:YES];

    [contentsViewController release];

}

не забудьте освободить выбранный BookId в dealloc из BookContentsViewController.

, так как selectedBookId теперь является NSString. Вам может понадобиться целочисленное значение, так что вы просто наберете selectedBookIdIntegerValue=[self.selectedBookId intValue];

0 голосов
/ 13 июня 2011

Вы можете передать значение с помощью NSInteger как:

@interface BookContentsViewController : UIViewController {
    NSInteger CurrentBookId;
}
@property(assign) NSInteger CurrentBookId;
@end


@implementation BookContentsViewController
@synthesize CurrentBookId;

Вот вам кнопка бара Действие:

-(IBAction)showBookContents{
BookContentsViewController *contentsViewController = [[BookContentsViewController alloc] initWithNibName:@"BookContentsViewController" bundle:nil];

contentsViewController.CurrentBookId = self.bookId;

[[self navigationController] pushViewController:contentsViewController animated:YES];

[contentsViewController release];

}
0 голосов
/ 13 июня 2011

Вы вызываете метод для экземпляра BookDescriptionViewController, однако он определен в BookContentsViewController

...