Skocz do zawartości

Witaj!

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

Zdjęcie
- - - - -

[[UIApplication sharedApplication] - co zrobiłem źle?


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

#1 iPod Touch Maniak

iPod Touch Maniak
  • 640 postów

Napisano 10 lutego 2010 - 12:55

Witam

Mam taki problem - robię odnośnik otwierający safari i wyświetlający Naszą-Klasę, łącze IBAction z przyciskiem w Interface Builder, odpalam program w symulatorze, klikam na przycisk otwierający naszą klasę, i wywala mnie do home screen w symulatorze.

SpolecznoscioweViewController.m:

-(IBAction) NaszaKlasa:(id)sender; {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.nasza-klasa.pl"]];
}


SpolecznoscioweViewController.h:

-(IBAction) NaszaKlasa:(id)sender;


Co zrobiłem źle i co trzeba poprawić?

Pozdrawiam
iPod touch maniak

#2 wojtkow

wojtkow


  • 6 767 postów
  • Płeć:
  • SkądPoznań

Napisano 10 lutego 2010 - 19:36

Napisz co Ci wyrzuca na konsoli, bo bez tego to ciężko coś wymyślić.

#3 iPod Touch Maniak

iPod Touch Maniak
  • 640 postów

Napisano 10 lutego 2010 - 20:56

[Session started at 2010-02-10 20:51:49 +0100.]
2010-02-10 20:51:51.536 FastLinkPL[504:20b] Unknown class FirstViewController in Interface Builder file.
2010-02-10 20:51:53.931 FastLinkPL[504:20b] *** -[UIViewController NaszaKlasa:]: unrecognized selector sent to instance 0x3d21680
2010-02-10 20:51:53.932 FastLinkPL[504:20b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[UIViewController NaszaKlasa:]: unrecognized selector sent to instance 0x3d21680'
2010-02-10 20:51:53.933 FastLinkPL[504:20b] Stack: (
8307803,
2536627771,
8689723,
8259190,
8111810,
23589977,
23997346,
24006083,
24001833,
23694727,
23603228,
23630005,
89809,
8092544,
8088648,
83853,
84050,
23633923,
9492,
9346
)

[Session started at 2010-02-10 20:51:53 +0100.]



#4 wojtkow

wojtkow


  • 6 767 postów
  • Płeć:
  • SkądPoznań

Napisano 10 lutego 2010 - 21:08

No masz tam odpowiedź, nie widzę całości Twojego kodu, ale masz burdel w klasach. Ewidentnie gdzieś odwołujesz się do FirstViewController, którego nie ma i stąd problem.

#5 macieks72

macieks72

  • 9 873 postów

Napisano 10 lutego 2010 - 21:25

Oj programiści, programiści! No przecież widać jak byk "Unknown class FirstViewController". I ten błąd nie ma żadnego związku z tym kawałkiem kodu który przedstawiłeś w pytaniu.

Do tego "SpolecznoscioweViewController.m".
No naprawdę, ale każdy programista nie ważne czy to Szwed, Niemiec czy Hindus, używa języka angielskiego do nazewnictwa klas, zmiennych, metod itp.

#6 wojtkow

wojtkow


  • 6 767 postów
  • Płeć:
  • SkądPoznań

Napisano 10 lutego 2010 - 21:50

^^ a co ja napisałem :D, burdel :) I muszę się zgodzić, nazewnictwo w języku Szekspira i to z sensem, bo to procentuje gdy po roku musimy jakiś błąd poprawić.

#7 iPod Touch Maniak

iPod Touch Maniak
  • 640 postów

Napisano 10 lutego 2010 - 22:10

a moze jest mi wygodniej w polskim? i tak nikt poza mną nie widzi tego po kompilacji.

ok wracajmy do tematu.
utworzyłem nowy projekt i teraz wywala taki błąd:

[Session started at 2010-02-10 21:59:14 +0100.]
2010-02-10 21:59:18.997 iFastLink[1217:20b] *** -[UIViewController CNN:]: unrecognized selector sent to instance 0x3d1d6a0
2010-02-10 21:59:18.999 iFastLink[1217:20b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[UIViewController CNN:]: unrecognized selector sent to instance 0x3d1d6a0'


nie wiem co o tym myśleć... usunąłem firstviewcontroller z projektu(tab bar app), zamiast tego zrobilem NewsView, CommunityView i SearchingView w których nic nie zmienialem poza NewsView w którym dałem odnośnik do CNNu...

podejrzewam że źle napisałem kod IBAction

#8 wojtkow

wojtkow


  • 6 767 postów
  • Płeć:
  • SkądPoznań

Napisano 10 lutego 2010 - 22:24

w IBAction masz jedną linijkę która jest poprawna, wklej więcej kodu to może ktoś coś na to poradzi. Usunięcie niezadeklarowanej klasy nic nie da, bo odwołanie do niej zastąpiłeś innym odwołaniem i problem nadal jest (jak widać) obecny. Niestety z fusów (czyli linijki kodu) jest ciężko coś wywróżyć. I przy okazji, prosić o pomoc to nie wstyd, ale prosząc daj innym możliwość pomożenia Ci. Opisując szeroko problem ułatwiasz sobie tą pomoc, a przy okazji ułatwiasz kolejnym osobom zrozumienie zarówno problemu jak i jego rozwiązania. A po drugie słuchaj rad, nawet jeżeli moja czy Macieja rada zabrzmiała jak złośliwość to wierz mi, że przynajmniej u mnie to złośliwością nie było. Widziałem wiele projektów, które z czasem rozkładała niechlujność w kodzie. Jak nie będziesz miał od początku porządku to daleko nie zajedziesz.

#9 macieks72

macieks72

  • 9 873 postów

Napisano 10 lutego 2010 - 22:38

Moja też nie była złośliwością, po prostu należy uczyć się dobrych nawyków. A ja jestem wyczulony na tym punkcie i zawsze będę zwracał uwagę ;) Być może już właśnie teraz wychodzą pierwsze objawy tego niechlujstwa w kodzie i dlatego nie możesz sobie z tym poradzić. Wierz mi, jak nie teraz to wyjdą później. Co do problemu to niestety ale nic nie pomogę bo nie znam za dobrze programowania pod iPhone.

#10 iPod Touch Maniak

iPod Touch Maniak
  • 640 postów

Napisano 11 lutego 2010 - 09:47

Oto potrzebne udokumentowanie:

NewsView.m:


#import "NewsView.h"


@implementation NewsView

-(IBAction) CNN:(id)sender; {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.cnn.com"]];
}


- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];

// Release any cached data, images, etc that aren't in use.
}

- (void)viewDidUnload {
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}


- (void)dealloc {
[super dealloc];
}


@end


NewsView.h:

#import


@interface NewsView : UIViewController {

}

-(IBAction) CNN:(id)sender;

@end


Dołączona grafika

#11 demarca

demarca
  • 301 postów
  • SkądLegnica

Napisano 11 lutego 2010 - 12:29

wyrzuć podkreślony średnik z pierwszej linii poniżej i zobacz co będzie:

-(IBAction) CNN:(id)sender[COLOR="Red"][U][B];[/B][/U][/COLOR] {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.cnn.com"]];
}


#12 iPod Touch Maniak

iPod Touch Maniak
  • 640 postów

Napisano 11 lutego 2010 - 18:48

niestety nadal to samo... błąd na konsoli również ten sam.

#13 wojtkow

wojtkow


  • 6 767 postów
  • Płeć:
  • SkądPoznań

Napisano 11 lutego 2010 - 19:44

Klasa NewsView wygląda prawidłowo. Problem tkwi ewidentnie poza nią, np w sposobie jaki została utworzona / wyświetlona. Jeżeli chcesz to wyślij mi na PW / email spakowany projekt to w niego zajrzę.

#14 iPod Touch Maniak

iPod Touch Maniak
  • 640 postów

Napisano 11 lutego 2010 - 20:30

MEGAUPLOAD - The leading online storage and file delivery service

#15 wojtkow

wojtkow


  • 6 767 postów
  • Płeć:
  • SkądPoznań

Napisano 11 lutego 2010 - 22:34

Było tak:
Dołączona grafika

Sprawa jest prosta, nie tworzysz klasy NewsView (która notabene powinna się nazywać NewsViewController bo dziedziczy z UIViewController a nie z UIView :) )
Najłatwiej zrobić to tak:
Dołączona grafika


Ale docelowo radzę Ci zapomnieć o IB i zacząć takie rzeczy robić z kodu, naprawdę łatwiej panuje się wtedy nad swoim kodem.

#16 iPod Touch Maniak

iPod Touch Maniak
  • 640 postów

Napisano 12 lutego 2010 - 10:38

dzięki ;) wielki plus ode mnie :) temat do zamknięcia

#17 slaj

slaj
  • 254 postów

Napisano 11 marca 2010 - 13:28

No naprawdę, ale każdy programista nie ważne czy to Szwed, Niemiec czy Hindus, używa języka angielskiego do nazewnictwa klas, zmiennych, metod itp.


Wierz mi, są czasem przesłanki by nazywać klasy, metody po polsku (i to jeszcze z polskimi czcionkami). 18 lat doświadczenia w kodowaniu i czasem polskie nazwy klas nazwałbym raczej "chlujstwem" :-) Żadnego offence, ale naprawdę czasem gdy projektant ma za zadanie ogarnąć dziedzinę wiedzy o której nie ma bardzo pojęcia, a ma dużo dokumentacji po polsku od pracodawcy to o wiele lepiej się trzymać fachowego nazewnictwa, a nie wydziwiać głupią angielszczyznę. Wszystko zależy od podejścia. Gdy koduję dla siebie w domu to używam tylko angielskich nazw i fakt, na to też jestem wyczulony. No ale są różne sytuacje i nie powinno się oceniać projektu tylko po tym że ma polskie nazwy zmiennych (i to koniecznie z polskimi czcionkami!!) :D Inna sprawa, że taki projekt ciężko rozwijać dalej przez nie-polaków, ale od tego jest refactoring. A w korporacyjnym SVN'ie lepiej żeby wszystko zgadzało się z polską dokumentacją wymagań.

#18 Maruder

Maruder
  • 39 postów

Napisano 11 marca 2010 - 13:32

Podziwiam Was za korzystanie z IB albo inaczej... Za cierpliwość... Gdybyście od początku tworzyli wszystko w kodzie a nie bawili się z nibami to wiedzielibyście dokładnie co i gdzie się dzieje. A co do nazewnictwa w programowaniu jestem zdecydowanym zwolennikiem korzystania z języka angielskiego.

#19 macieks72

macieks72

  • 9 873 postów

Napisano 12 marca 2010 - 21:47

Ja też jestem zwolennikiem angielskiego, zresztą raczej wg mnie nie ma o czym mówić, tak być musi. Chociaż @slay troszkę racji ma odnośnie tych specyficznych projektów (nazewnictwa), tylko że jak już się decydujemy na polski to całość po polsku, bez dziwnego mieszania getImie() albo OsobaController itp. Jak już to wszystko po polsku czyli pobierzImie() OsobaKontroler (chociaż ten Kontroler mi tu wyjątkowo nie pasuje). Heh, także sam nie wiem w przypadku Kontrolera co bym zrobił po polsku ;) Na szczęście nie piszę polskich projektów, także to mi odchodzi ;)

#20 iPod Touch Maniak

iPod Touch Maniak
  • 640 postów

Napisano 13 marca 2010 - 10:39

projekty które robie sobie "dla przyjemności" nazywam po polsku, bo po prostu jest mi wygodniej. Co innego programy dla szerszej publiczności (wyjątkiem są tu programy dla polaków :)) robię po angielsku

#21 macieks72

macieks72

  • 9 873 postów

Napisano 13 marca 2010 - 17:23

A ja nawet dla siebie po angielsku, pewnie dlatego że tak mi już zostało z czasów kiedy się do angielskiego nazewnictwa przymuszałem żeby wyrobić sobie taki nawyk.




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

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