Проблема в простом приложении для iOS - PullRequest
0 голосов
/ 22 февраля 2011

У меня проблема. У меня есть 2 класса «Рейтинг» (с .h и .m), «RatingViewController» (с .h и .m).

Rating.h

#import 
@interface Rating : NSObject {
    int usrLyrics;
    int usrMusic;
    int usrTotal;
}
- (void) setUsrTotal;
@end

Rating.m

#import "Rating.h"
@implementation Rating
-(void) incUsrLyrics
{
    usrLyrics = 5;
}
- (void) incUsrMusic {
    usrMusic = 6;
}
- (void) setUsrTotal {
    usrTotal = usrMusic + usrLyrics;
}
}
@end

RatingViewController.h

@interface RatingItudeViewController : UIViewController {
    Rating *rating;
}
- (IBAction) submitRating;

RatingViewController.m

#import "RatingItudeViewController.h"

@implementation RatingItudeViewController

- (IBAction) submitRating {
    [rating setUsrTotal];
    NSLog(@"usrTotal is %i", [rating usrTotal]);
}
@end

Это выглядит просто, но не работает, в консоли всегда "usrTotal равен 0". Помогите мне, пожалуйста.

ОБНОВЛЕНО

Только сейчас я добавляю пару строк в RatingViewController.m

- (IBAction) submitRating {
    [rating incUsrMusic];
    [rating incUsrLyrics];
    [rating setUsrTotal];
    NSLog(@"usrTotal is %d", [rating usrTotal]);
}

и в Rating.h

-(void) incUsrLyrics;
- (void) incUsrMusic;
- (void) setUsrTotal;
- (int) usrTotal;

А при нажатии кнопки в консоли снова «usrTotal is 0».

Ответы [ 2 ]

1 голос
/ 22 февраля 2011

Методы incUsrLyrics и incUsrMusic никогда нигде не вызываются, поэтому никогда не устанавливают свои начальные значения.Если эти значения необходимы для работы класса, они должны быть установлены в инициализаторе этого класса.

В Rating.m

- (id)init
{
    if (self = [super init])
    {
        usrLyrics = 5;
        usrMusic = 6;
    }

    return self;
}

или, что еще лучше, более конкретный инициализатор..

- (id)initWithUserLyrics:(NSInteger)lyricsValue music:(NSInteger)musicValue
{
    if (self = [super init])
    {
        usrLyrics = lyricsValue;
        usrMusic = musicValue;
    }

    return self;
}
1 голос
/ 22 февраля 2011

Это правильно, вам нужно поместить инициализацию usrMusic и usrLyrics в сообщение конструктора init . По умолчанию им присвоены значения 0. 0 + 0 равно 0, отсюда и результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...