Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2011-04-24, 21:38
  #1
Medlem
p1n6s avatar
Jag har de senaste dagarna lekt med nya Xcode men har stött på problem med en uppgift där jag vill lista de processer som körs. Sprang på denna kod men har problem att implementera detta i min app.

Jag kör en View-based application och vill visa processerna i en label (eller liknande) men hur ska jag deklarera arrayen så den får värdet av metoden?

.h
Kod:
#import <UIKit/UIKit.h>

@interface processesViewController : UIViewController {
    UILabel *textlabel1;
    UILabel *textlabel2;
    UISwitch *switch1;
}

@property(nonatomic,retain) IBOutlet UILabel *textlabel1;
@property(nonatomic,retain) IBOutlet UILabel *textlabel2;
@property(nonatomic,retain) IBOutlet UISwitch *switch1;

-(IBAction)changetext;
-(NSArray *)runningProcesses;

@end

.m
Kod:
#import "processesViewController.h"
#import <sys/sysctl.h>

@implementation processesViewController
@synthesize textlabel1;
@synthesize textlabel2;
@synthesize switch1;

- (void)dealloc
{
    [super dealloc];
    [textlabel1 release];
    [switch1 release];
}

-(IBAction)changetext
{

//här vill jag att textlabel2 ska lista processerna

}


-(NSArray *)runningProcesses {
    
    int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_ALL, 0};
    size_t miblen = 4;
    
    size_t size;
    int st = sysctl(mib, miblen, NULL, &size, NULL, 0);
    
    struct kinfo_proc * process = NULL;
    struct kinfo_proc * newprocess = NULL;
    
    do {
        
        size += size / 10;
        newprocess = realloc(process, size);
        
        if (!newprocess){
            
            if (process){
                free(process);
            }
            
            return nil;
        }
        
        process = newprocess;
        st = sysctl(mib, miblen, process, &size, NULL, 0);
        
    } while (st == -1 && errno == ENOMEM);
    
    if (st == 0){
        
        if (size % sizeof(struct kinfo_proc) == 0){
            int nprocess = size / sizeof(struct kinfo_proc);
            
            if (nprocess){
                
                NSMutableArray * array = [[NSMutableArray alloc] init];
                
                for (int i = nprocess - 1; i >= 0; i--){
                    
                    NSString * processID = [[NSString alloc] initWithFormat:@"%d", process[i].kp_proc.p_pid];
                    NSString * processName = [[NSString alloc] initWithFormat:@"%s", process[i].kp_proc.p_comm];
                    
                    NSDictionary * dict = [[NSDictionary alloc] initWithObjects:[NSArray arrayWithObjects:processID, processName, nil] 
                                                                        forKeys:[NSArray arrayWithObjects:@"ProcessID", @"ProcessName", nil]];
                    [processID release];
                    [processName release];
                    [array addObject:dict];
                    [dict release];
                }
                
                free(process);
                return [array autorelease];
            }
        }
    }
    
    return nil;
}


- (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.
}

#pragma mark - View lifecycle


// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad
{
    [super viewDidLoad];

}


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

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

@end

(Har läst C och JAVA)

Tack för hjälp!
/J
Citera
2011-04-25, 19:09
  #2
Medlem
p1n6s avatar
Ok, har gjort lite framsteg. Så här ser metoden ut nu:

Kod:
-(IBAction)changetext
{
    NSMutableArray* processes=[[processesViewController alloc] init];
    [processes runningProcesses];
    
    NSMutableString* processesXML = [NSMutableString string];
    for (NSDictionary * dict in processes){
        //fill-out;
    }
}

Har lyckats göra en array av runningProcesses-metoden men tror inte den blev riktigt bra för programmet kraschar när den ska in i for-loopen.

Någon som har någon idé?
Citera
2011-04-25, 19:50
  #3
Medlem
p1n6s avatar
Ok, glöm det, jag knäckte det. Så här skulle det se ut:

Kod:
-(IBAction)changetext
{
    NSArray* processes=[[processesViewController alloc] runningProcesses];
    for (NSDictionary * dict in processes){
        NSLog(@"%@ - %@", [dict objectForKey:@"ProcessID"], [dict objectForKey:@"ProcessName"]);
    }
}
Citera
2011-06-29, 02:04
  #4
Medlem
Stora (nybörjartråden) för Objective-C [/Mod]

Varför ändras inte labels text genom denna kod?

Kod:
- (void)awakeFromNib {
    [label setText:@"Foo"];
    NSLog(@"Bevis för att awakeFromNib anropas"); 
}

Label visar "Label" (IB:s default text).
Metodanropet(setText) fungerar om jag gör det i exempelvis en IBAction istället.

Jag är säker på att jag har läst om och lyckats ändra IB-objekt i awakeFromNib tidigare...
Citera
2011-06-29, 04:02
  #5
Medlem
Problem löst genom att använda "viewDidLoad"-metoden istället för awakeFromNib.
Är dock tämligen säker på att jag har använt den sistnämnda metoden vid tidigare tillfällen, men jag antar att det gäller andra användningsområden än just "setText" för en label.
Citera
2011-07-04, 12:03
  #6
Medlem
Stora (nybörjartråden) för Objective-C [/Mod]

hur svårt är det att sakta ner musik/ljud i objective C? jag är helt nybörjare på området och undrar alltså om det finns något sorts kommando som man enkelt kan använda, och om inte, hur svårt är det?
Citera
2011-08-14, 13:13
  #7
Medlem
Knase.s avatar
Objective-C- enbart alernativ 'view' av File's owner.

Jag sitter med en tutorial för iPhone app som ändrar en label beroende på vilken knapp man klickar på. (Länk)

När jag drar från File's owner till min tomma UILabel ska jag få upp alternativet labelsText, men jag får bara upp view? Var har jag gjort för fel?

Kod:
#import <UIKit/UIKit.h>

@interface KnasesButtonsViewController : UIViewController {
	UILabel *labelsText;
	
}
@property(nonatomic, retain) IBOutlet UILabel *labelsText;
-(IBAction) clicked: (id)sender;

@end

Kod:
#import "KnasesButtonsViewController.h"

@implementation KnasesButtonsViewController

@synthesize labelsText;

-(IBAction) clicked:(id)sender{
	NSString *titleOfButton = [sender titleForState:UIControlStateNormal];
	NSString *newLabelText = [[NSString alloc]initWithFormat:@"%@", titleOfButton];
	labelsText.text = newLabelText;
	[newLabelText release];
}



- (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 {
	self.labelsText = nil;
}


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

@end
Citera
2011-08-15, 19:36
  #8
Medlem
stenbergers avatar
hur dela två floats [Objective-C]

Hej, en snabb nybörjar fråga från en idiot!

Hur dividerar jag två floats i Objective-C?

Floatsen är check och total (see below):


just nu får jag tip = check medans total fungerar som den ska :/

current output:

tackar för svar!

edit:
Helvete e så slut i huvudet att jag la tråden i fel forum! ber om ursäkt den bör ligga i "övriga språk"
__________________
Senast redigerad av stenberger 2011-08-15 kl. 19:39.
Citera
2011-08-15, 22:19
  #9
Moderator
Protons avatar
Övriga utvecklingsfrågor -> Övriga språk /Mod
Citera
2011-08-16, 10:30
  #10
Medlem
stenbergers avatar
För övrigt var jag sjukt trött igår, men en kompis hjälpte mig inse att det är inget fel på koden. ironiskt nog var det fel på formeln
Citera
2011-08-17, 22:59
  #11
Medlem
Ser att du inte har någon

Kod:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

i din .m fil. Är det något du valt att inte kopiera in i code taggen eller har du skapat UIViewController utan .xib fil? i såfall måste du sätta custom class i interface builder till KnasesButtonsViewController under identity inspector. Jag rekommenderar dock att du skapar en ny fil och ser till att checka för with .xib file under skapandet. Det borde lösa ditt problem och då får du de metoder som behövs för init med .xib.
Citera
2011-08-19, 13:15
  #12
Medlem
Einsturzendes avatar
[Objective-C] Problem: Range or index out of bounds

Hej,

jag håller på att göra en Google+ Notifier till OS X men har stött på lite problem. När jag kör följande kod får jag problem med -[__NSCFConstantString substringWithRange:]: Range or index out of bounds.


Projektet finns för nedladdning på http://dl.dropbox.com/u/10827593/G%2B%20Notifier.zip
Citera
  • 1
  • 2

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback