Objective-C newbie hier. Al een flinke ervaring met talen zoals Java, C# en andere, maar binnen Objective-C voel ik me wat verloren... Momenteel zit ik te sukkelen met het volgende:
Ik ben bezig met het aanmaken van een applicatie op de iPhone die gebruikt maakt van Bonjour (NSNetservice). Alles goed tot daar, documentatie opgezocht en code gebruikt van Apple. Dit werkt totnutoe allemaal. Maar! Ik wil vanuit mijn delegate een wijziging aanbrengen in mijn GUI, die zich in een ander class bevindt, maar dit lukt niet.
Ik heb dit op volgende manier proberen op te lossen, maar dat werkt niet, want in de opgeroepte methode addToLabel kan er een reference niet gevonden worden.
NSNetserviceBrowserDelegate.m:
mainViewController.m.
Dit werkt, en ik kan met breakpoints zien dat er in de methode addtolabel gesprongen wordt, maar om een of andere reden kan hij dan de tekst die al in dat label staat niet ophalen. De foutmelding die hierbij gegeven wordt is de volgende:
Dankjewel!
Ik ben bezig met het aanmaken van een applicatie op de iPhone die gebruikt maakt van Bonjour (NSNetservice). Alles goed tot daar, documentatie opgezocht en code gebruikt van Apple. Dit werkt totnutoe allemaal. Maar! Ik wil vanuit mijn delegate een wijziging aanbrengen in mijn GUI, die zich in een ander class bevindt, maar dit lukt niet.
Ik heb dit op volgende manier proberen op te lossen, maar dat werkt niet, want in de opgeroepte methode addToLabel kan er een reference niet gevonden worden.
NSNetserviceBrowserDelegate.m:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
| #import <UIKit/UIKit.h> #import "NetServiceBrowserDelegate.h" #import "MainViewController.h" @implementation NetServiceBrowserDelegate .... /KNIP .... // UI update code - (void)updateUI { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; MainViewController *mvc = [[MainViewController alloc] init]; if(searching) { // Update the user interface to indicate searching // Also update any UI that lists available services [mvc addToLabel:@"searching"] } else { // Update the user interface to indicate not searching [mvc addToLabel:@"not searching"]; } [pool drain]; } @end |
mainViewController.m.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
| #import "MainViewController.h" #import "MainView.h" #import "NetServiceBrowserDelegate.h" @implementation MainViewController @synthesize myLabel; -(IBAction) startDiscovery:(id) sender { //myLabel.text = @"Starting discovery with Bonjour"; [self addToLabel:@"Starting bonjour discovery"]; //id delegate = NetServiceBrowserDelegate; NetServiceBrowserDelegate *delegate; delegate = [[NetServiceBrowserDelegate alloc] init]; NSNetServiceBrowser *serviceBrowser; serviceBrowser = [[NSNetServiceBrowser alloc] init]; [serviceBrowser setDelegate:delegate]; [serviceBrowser searchForServicesOfType:@"_smb._tcp" inDomain:@""]; } ..... /KNIP ..... -(void) addToLabel:(NSString *) text { NSString* newText; NSString* labelText; labelText = myLabel.text; newText = [text stringByAppendingString:labelText]; myLabel.text = newText; } ...... @end |
Dit werkt, en ik kan met breakpoints zien dat er in de methode addtolabel gesprongen wordt, maar om een of andere reden kan hij dan de tekst die al in dat label staat niet ophalen. De foutmelding die hierbij gegeven wordt is de volgende:
code:
1
2
3
| 2008-12-19 18:46:56.027 iThread[10565:20b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSCFString stringByAppendingString:]: nil argument' |
Dankjewel!