2015-05-02 3 views
0

Когда кто-то нажимает на ячейку просмотра таблицы, я хотел бы сохранить indexPath.row того, что они нажимают на целое, чтобы я мог делать что-то другим методом с этим числом. Как его сохранить? Когда я делаю следующее, я получаю предупреждения:Как сохранить indexPath.row как глобальное целое число?

.h

@property NSInteger *songIndex; 

.m

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    self.songIndex = indexPath.row; 
    // Warning: Incompatible integer to pointer conversion assigning to 'NSInteger *' (aka 'long *') from 'NSInteger' (aka 'long') 
} 
- (void)otherMethod { 
    PFUser *user = [PFUser currentUser]; 
    [user setObject:[song objectAtIndex:self.songIndex] forKey:@"song"]; 
    // Warning: Incompatible pointer to integer conversion sending 'NSInteger *' (aka 'long *') to parameter of type 'NSUInteger' (aka 'unsigned long') 
} 
+0

Покажите нам предупреждение. –

+0

Вам не нужна глобальная переменная. Вам нужна переменная или свойство экземпляра. – rmaddy

ответ

1

NSInteger не класс, так что вы не можете создать объект как указатель, так просто удалить * из вашей декларации.

и вы определили, что как свойство так Спецификатор доступа должен быть (неатомическим назначьте)

@property (nonatomic,strong) NSNumber *songIndex; 

Надеется, что это решит вашу проблему.

UPDATE:

Попробуйте использовать NSNumber Class

[NSNumber numberWithInteger:indexPath.row]; 
+0

Это делает songIndex always = 0. – smecperson

+1

, пожалуйста, отлаживайте и проверьте после назначения значения в методе didselectrow значение update в songIndex? –

+0

Это log 0 в didSelect и otherMethod. – smecperson

1

Удалите * Перед songIndex. Вы также должны быть настройки ваших свойств, как это:

@property (nonatomic) NSInteger songIndex; 

NSInteger примитивный тип, который возвращает переменную и не требует указатель.

Однако, если вы можете использовать указатель на примитивный тип, такой как BOOLS, поплавки, Целые и т.д.

NSInteger *songIndex; 
[user setObject:[song objectAtIndex:&songIndex] forKey:@"song"]; 
+0

Это делает songIndex always = 0. – smecperson

+0

Когда и где вы называете свой другой метод? Я показал, что вы должны работать. Вы должны зарегистрировать свойство songIndex, как только вы установите его в файле didSelectRow, если он там работает, то он потеряется где-то еще по линии. –

+0

Он записывает 0 в didSelect. – smecperson

0

В .h

@property INT songIndex;

В ом

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    self.songIndex =(int) indexPath.row; 
} 
- (void)otherMethod { 
    PFUser *user = [PFUser currentUser]; 
    [user setObject:[song objectAtIndex:self.songIndex] forKey:@"song"]; 
} 

ИЛИ В .h

@property NSIndexPath (nonatomic,strong) songIndex; 

В ом

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    self.songIndex = indexPath; 
} 
- (void)otherMethod { 
     PFUser *user = [PFUser currentUser]; 
     [user setObject:[song objectAtIndex:self.songIndex.row] forKey:@"song"]; 
} 
Смежные вопросы