Toon posts:

[Obj-C/Cocoa] Wijzigingen aanbrengen in GUI vanuit delegate

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
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:
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! 8)

Acties:
  • 0 Henk 'm!

  • Mikey NL
  • Registratie: Februari 2004
  • Laatst online: 09-09 14:34
Ik ben ook nog niet zo'n ster in Objective-C, maar ik vraag me af wat myLabel is op dit moment, misschien makkelijk om ook je .h files erbij te zetten.

Je weet 100% zeker dat de connecties in Interface Builder ook goed zitten, heb volgens mij daardoor ook wel eens dit probleem gehad.

Als het een textfield is doe ik volgens mij meestal de string eruit halen door [textField stringValue] te doen, zit hier alleen niet achter m'n eigen computer, dus kan het niet snel even bekijken.

Acties:
  • 0 Henk 'm!

  • justincase
  • Registratie: December 2004
  • Laatst online: 28-08 21:43
Je stuurt nu basically
code:
1
[text stringByAppendingString:nil];
wat inderdaad niet kan. Op welke addToLabel call gaat het precies fout? In je interface file's myLabel goed staan etc?