Как я могу увеличить значение int в NSMutableArray? - PullRequest
0 голосов
/ 01 марта 2012

Я получил:

@interface ViewController : UIViewController
{
    int index_counter;
    //NSMutableArray *logins;
}
@property (weak, nonatomic) IBOutlet UITextField *count;
@property (strong, nonatomic) NSMutableArray *logins;
- (IBAction)next_button:(id)sender;
@end

Какой массив содержит объекты:

@interface THEOBJECT : NSObject 
{
    NSString *uname;
    int counter;
}
-(void) SetUser: (NSString *) username;
-(void) SetCount: (int) value;
-(void) print;
@property (nonatomic, retain) NSString *uname; 
@property (nonatomic,readwrite) int counter; //not sure if this is correct
@end

@implementation SiteValue

@synthesize uname;
@synthesize counter;


-(void) SetCount:(int) value
{
    counter=counter+1;    
}

@end

и мой метод должен увеличивать значение счетчика в объекте THEOBJECT в каждом индексе массива:

- (IBAction)next_button:(id)sender
{
    index_counter=index_counter-1;
    if (index_counter<0)
    {
        index_counter=0;
    }
    username.text=[[logins objectAtIndex:index_counter] uname];
    [[logins objectAtIndex:index_counter] counter]=[[logins objectAtIndex:index_counter] counter]+1; //ERROR HERE.
}

Там, где я написал «ОШИБКА ЗДЕСЬ», он должен увеличивать значение счетчика каждый раз, когда я нажимаю кнопку next и сохраняю +1 в массиве. Но это дает мне ошибку только для чтения. Точная ошибка "assigning to 'readonly' return result of an Objective-C message not allowed". Я думаю, что лучше всего вызвать метод setcount:, но он не позволяет мне вызывать его, так как это два разных интерфейса. Есть идеи?

Ответы [ 3 ]

1 голос
/ 01 марта 2012

В строке:

[[logins objectAtIndex:index_counter] counter]=[[logins objectAtIndex:index_counter] counter]+1; //ERROR HERE.

Вы должны использовать установщик, а не получатель свойства counter в левой части задания. Таким образом, вы должны изменить эту строку на:

[[logins objectAtIndex:index_counter] setCounter:[[logins objectAtIndex:index_counter] counter]+1];

Чтобы сделать это более понятным, вы можете разбить эту строку на две строки:

int currentValue = [[logins objectAtIndex:index_counter] counter];
[[logins objectAtIndex:index_counter] setCounter:currentValue+1];

Вы также можете использовать точечную запись и написать ее как:

THEOBJECT *myObject = [logins objectAtIndex:index_counter];
int currentValue = myObject.counter;
myObject.counter = currentValue + 1;

Или:

THEOBJECT *myObject = [logins objectAtIndex:index_counter];
myObject.counter = myObject.counter + 1;

Или:

THEOBJECT *myObject = [logins objectAtIndex:index_counter];
myObject.counter++;
1 голос
/ 01 марта 2012

Самый простой способ сделать это - получить доступ к свойству counter, но для этого вам необходимо привести результат objectAtIndex:, так как он возвращает id, а Objective-C позволяет вызывать любой метод дляid экземпляр, вы не можете вызвать любое свойство:

((THEOBJECT *)[logins objectAtIndex:index_counter]).counter++;
1 голос
/ 01 марта 2012

counter в этой строке - метод доступа:

[[logins objectAtIndex:index_counter] counter]

Возвращает вам значение, поэтому вы не можете его установить (Это все равно, что сказать 50 = 100 - вы не можете установить значениевот так).

Если вы хотите установить переменную, вам нужно использовать метод setCounter:

[[logins objectAtIndex:index_counter] setCounter:[[logins objectAtIndex:index_counter] counter]+1];
...