2014-11-16 2 views
-1

для Objective-C и сохранить его очень просто. Я хочу понять одну вещь за раз ... Я создал очень простой класс, называемый студентом, все, что он делает, добавляет два числа, пытаясь понять, как вещи переходят в и обратно из методов) ** я переписал код == >> посмотреть на конце, чтобы увидеть версию, которая работает **Как отправить значения в Ivar в методе

Если у меня есть метод, который имеет

@property (nonatomic) int firstNum; 
@property (nonatomic) int secondNum; 

и у меня есть экземпляр моего класса, называемого учеником. Я назначаю значение firstNum, как student.firstNum = 100; student.secondNum = 77;, что легко и метод добавляет их и отправляет сумму в return

Но в главном я попытался назначить его из массива и это не сработало, я попробовал

student.firstNum = [myIntegers objectAtIndex:0]; 

и

student.firstNum = [myIntegers objectAtIndex:i]; //using a for loop with i index 

он говорит несовместимый указатель на целое преобразование

Вот фрагмент из основного я попробовал, он не завершен, он просто пытается установить firstNum, в конце концов, я также настрою secondNum и отправлю каждую пару метод добавляется вместе, но сейчас я застрял пытаюсь получить FirstNum присваивается значение в myIntegers[i] начать

NSMutableArray *myIntegers = [NSMutableArray array]; 

for (NSInteger i= 0; i <= 10; i++) { 

    [myIntegers addObject:[NSNumber numberWithInteger:i]]; // this works up to here 

    student.firstNum = [myIntegers objectAtIndex:i]; // this does not work 

} 

Я также попытался [i].

Вот мой метод:

- (int)addNumbers { 

    int sum = self.firstNum + self.secondNum; 
    return sum; 
} 

ВОТ ЧТО РАБОТАЕТ: при условии, у меня есть студент объект

.m

  • (длинные) addNumbers: (NSNumber *) х : (NSNumber *) y {

    долгий срок;

    sum = [x integerValue] + [y integerValue]; возвратная сумма; }

Основной

NSMutableArray * myIntegers1 = [NSMutableArray массива]; NSMutableArray * myIntegers2 = [NSMutableArray array];

for (NSInteger i= 0; i <40; i++) { 

     [myIntegers1 addObject:[NSNumber numberWithInteger:i]]; 
     [myIntegers2 addObject:[NSNumber numberWithInteger:i]]; 

долго сумма = [студент addNumbers: [myIntegers1 objectAtIndex: я]: [myIntegers2 objectAtIndex: я]];

 NSLog(@" The sum is %ld", sum); 
} 
+0

Вы массив состоит из 'NSNumber * 's, которые являются указателями на объекты Objective-C. Это не удивительно: 'NSArray' может содержать только указатели на объекты, а не примитивы. Hance, 'objectAtIndex:' возвращает общий указатель объекта ('id'). 'int' является примитивным, встроенным C-типом. Это не указатель. Таким образом, вы не можете присвоить возвращаемое значение 'objectAtIndex:' для свойства, потому что один из них является «id» (например, указателем на объект Objective-C), а другой - «int». Однако вы могли бы попытаться преобразовать объект 'NSNumber' в' int'. Прочтите документацию, чтобы узнать, как это сделать. –

ответ

0

Вы создаете свойства типа int, но в вашем for цикле, вы пытаетесь присвоить им NSNumber.

NSNumber простой контейнер для элемента переменного тока данных и может содержать int, float, char, bool и т.д.

Изменение цикла должно быть так:

for (NSInteger i= 0; i <= 10; i++) { 

    [myIntegers addObject:[NSNumber numberWithInteger:i]]; 

    student.firstNum = [[myIntegers objectAtIndex:i] intValue]; // this 'extracts' the int value from the NSNumber 

} 
+0

Это имеет смысл. Я хотел использовать что-то вроде –

+0

- (NSNumber *) addNumbers: (NSNumber *) x: (NSNumber *) y для передачи чисел Я попробую это, чтобы увидеть, могу ли я затем использовать [[myIntegers objectAtIndex: i] –

Смежные вопросы