Skocz do zawartości

Witaj!

Zaloguj lub Zarejestruj się aby uzyskać pełny dostęp do forum.

Zdjęcie
- - - - -

Poszukiwana pomoc w pisaniu aplikacji


  • Zaloguj się, aby dodać odpowiedź
5 odpowiedzi w tym temacie

#1 name91

name91
  • 10 postów

Napisano 18 lipca 2013 - 08:01

Witam,
Poszukuję kogoś, kto mógłby mi pomóc w napisaniu aplikacji. Nie szukam osła do klepania kodu, a jedynie osoby, która w wolnym czasie znalazła by 5 minut i pomogła z problemem. Piszę teraz pracę licencjacką z bezpieczeństwa systemów OS X, ale Objective-C okazał się bardziej opornym językiem niż podejrzewałem. Chodzi o proste błędy w kodzie, które dla sprawnego programisty (nawet niedzielnego) są do poprawienia w mniej niż minutę - po prostu mam braki z podstaw obj-c.
Problem I:
- (IBAction)radioThree:(id)sender{
    switch ([[sender selectedCell] tag]) {
        case 1:
            [radioStringThree setValue:@"przykladowy string - radio 3 "];
            break;
        ...
}
- (IBAction)addButton:(id)sender{
    [currentRule setValue:@""];
    [currentRule stringByAppendingString: @"przykładowy string - stringByAppendingString "];
    [currentRule stringByAppendingString: radioStringThree];
    NSLog(@"radio3 %@", radioStringThree);
    NSLog(@"added rule: %@", currentRule);
}

oczywiście w pliku nagłówkowym zadeklarowałem odpowiednie obiekty
...
    NSString *radioStringThree;
    NSString *currentRule;
    }
...
    - (IBAction)radioThree:(id)sender;
    - (IBAction)addButton:(id)sender;
...
Wynik:
NSLog wyrzuca mi dwa nil'e. Czemu :(?
Pozdrawiam i czekam na odpowiedź.

#2 darecki86

darecki86
  • 65 postów

Napisano 18 lipca 2013 - 17:25

Prawdopodobnie nie zaalokowałeś pamięci dla tych obiektów.

spróbuj zmienić np. linię
[currentRule setValue:@""];
na
currentRule = @"";


#3 name91

name91
  • 10 postów

Napisano 19 lipca 2013 - 19:46

poniższa próba alokacji wywala krzaczki na wyjściu.
-(id)init{
    self = [super init];
    if(self){
        currentRule = [[NSString alloc] init];
        radioStringOne = [[NSString alloc] init];
        radioStringTwo = [[NSString alloc] init];
        radioStringThree = [[NSString alloc] init];
    }
    return self;
}

zmiana na currentRule = @""; również, a dokładnie
2013-07-19 20:42:42.685 PracaDyplomowa[83796:303] *** -[__NSCFConstantString stringByAppendingString:]: nil argument
2013-07-19 20:42:42.718 PracaDyplomowa[83796:303] (
	0   CoreFoundation                      0x00007fff907aeb06 __exceptionPreprocess + 198
	1   libobjc.A.dylib                     0x00007fff919ce3f0 objc_exception_throw + 43
	2   CoreFoundation                      0x00007fff907ae8dc +[NSException raise:format:] + 204
	3   Foundation                          0x00007fff8ea05db0 -[NSString stringByAppendingString:] + 90
	4   PracaDyplomowa                      0x0000000100001fd1 -[AppDelegate addButton:] + 161
	5   AppKit                              0x00007fff869ca959 -[NSApplication sendAction:to:from:] + 342
	6   AppKit                              0x00007fff869ca7b7 -[NSControl sendAction:to:] + 85
	7   AppKit                              0x00007fff869ca6eb -[NSCell _sendActionFrom:] + 138
	8   AppKit                              0x00007fff869c8bd3 -[NSCell trackMouse:inRect:ofView:untilMouseUp:] + 1855
	9   AppKit                              0x00007fff869c8421 -[NSButtonCell trackMouse:inRect:ofView:untilMouseUp:] + 504
	10  AppKit                              0x00007fff869c7b9c -[NSControl mouseDown:] + 820
	11  AppKit                              0x00007fff869bf50e -[NSWindow sendEvent:] + 6853
	12  AppKit                              0x00007fff869bb644 -[NSApplication sendEvent:] + 5761
	13  AppKit                              0x00007fff868d121a -[NSApplication run] + 636
	14  AppKit                              0x00007fff86875bd6 NSApplicationMain + 869
	15  PracaDyplomowa                      0x0000000100001af2 main + 34
	16  libdyld.dylib                       0x00007fff864ed7e1 start + 0
	17  ???                                 0x0000000000000003 0x0 + 3
)


#4 thorn

thorn
  • 99 postów

Napisano 05 sierpnia 2013 - 20:17

Wklej w jaki sposób tworzysz obiekt.

#5 name91

name91
  • 10 postów

Napisano 06 sierpnia 2013 - 02:28

Dzięki za odpowiedzi, w sumie nie wiem o co chodziło, ale wygenerowałem sobię nową metodę w której alokowałem pamięć dla obiektów, zwróciłem ją w init i poszło.
-(id)initWithAlloc{
    self = [super init];
    if (self){
        rules = [[NSMutableArray alloc] init];
        rule = [[Rule alloc] init];
        string = [[NSTextField alloc] init];
    }
    return self;
}
dzięki za odpowiedzi,

#6 tmkszlc

tmkszlc

  • 1 846 postów
  • SkądSzczecin, PL

Napisano 06 sierpnia 2013 - 07:29

@name91, taka metoda initWithAlloc po pierwsze jest nazwana z du** a po drugie to poiwnno być to w metodzie init, którą wystarczy przesłonić. Nie chce mi się dociekać co było źle, bo pokazałeś małe fragmenty kodu (za małe), ale widzę, że problem jest z allokacją pamięci. Postawa typu: "W sumie nie wiem o co chodziło, ale coś tam zrobiłem i już nie ma błędu" jest do kitu. Takim sposobem daleko nie zajedziesz. Wystarczy zobaczyć co dzieje się po kolei w stosie. Wywołałeś metodę addButton (swoją), po czym wywołana została metoda stringByAppendingString (któraś z dwóch) i nastąpiła proba dodania nila. Na 100% jest to nil związany z obiektem (radioStringThree) bo go pewnie nigdzie nie inicjalizowałeś. pozdrawiam i zapraszam do czytania książek, posiedzenia 2 dni z problemem i dopiero napisanie tutaj. Inaczej nic się nei nauczysz.




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych