Att gå igenom en NSTextView tecken för tecken

Tråden skapades och har fått 14 svar. Det senaste inlägget skrevs .
1

Finns det något bra sätt att gå igenom en NSTextView i Objective-C tecken för tecken? Ungefär som en loop där man läser in varje tecken i ordning och beroende på vad det är för tecken som för tillfälle blir inläst så låter man programmet göra olika saker.

Tack.

  • Medlem
  • Mölndal
  • 2006-03-24 23:09

Du borde kunna få tag på dess innehåll mha
[[myNSTextView textStorage] string] eller [[myNSTextView textStorage] characters]
(har inte provat någon av dem, men rekommenderar första)

Jag ser också att den finns några nofications och delegate methods. Läs mer under NSTextStorage i developer-dokumentationen.

  • Medlem
  • Stockholm
  • 2006-03-25 01:32

Kanske något liknande detta?

- (void) kikaIgenomTexten: (void)
{

unsigned int i, inputLength;
NSString *text, *bokstav, *dinvaldaBokstav;

text = [dintextView string];

inputLength = ((int) [text length]);//Längden av inPut
		
		for (i = 0; i < inputLength; i++) { //Bokstav för bokstav
		
			}
	
			bokstav = [Text substringWithRange: NSMakeRange (i,1)];//Plocka ut  bokstaven i som i index
				
				if (bokstav == DinvaldaBokstav) {
					
					//Gör det du vill göra
					
				}
		}
}

Vänligen, Ylan

  • Oregistrerad
  • 2006-03-25 08:29

Eller så här:

- (IBAction)checkText:(id)sender
{
  NSString *text = [myTextView string];
  unsigned int index;
    
  for (index = 0; index < [text length]; index++)
  {
    if ([text characterAtIndex: index] == 'a')
    {
      NSLog(@"Found an a...\n");
    }
  }
}
  • Medlem
  • Stockholm
  • 2006-03-25 08:37
Ursprungligen av joakimk:

Eller så här:

- (IBAction)checkText:(id)sender
{
  NSString *text = [myTextView string];
  unsigned int index;
    
  for (index = 0; index < [text length]; index++)
  {
    if ([text characterAtIndex: index] == 'a')
    {
      NSLog(@"Found an a...\n");
    }
  }
}

joakimk en fråga från en n00b. Skickar man inte -length meddelandet till text vid varje iteration. Blir inte det väsentligen dyrare?

Vänligen, Ylan

  • Oregistrerad
  • 2006-03-25 08:45

Ylan, du har helt rätt, det är effektivare att mellanlagra längden.

  • Oregistrerad
  • 2006-03-25 08:56

Ylan, inte för att jag egentligen har någon aning, men har du tittat på textStorage? NSTextStorage ärver ju från NSMutableAttributedString.

  • Medlem
  • Stockholm
  • 2006-03-25 09:16
Ursprungligen av joakimk:

Ylan, inte för att jag egentligen har någon aning, men har du tittat på textStorage? NSTextStorage ärver ju från NSMutableAttributedString.

Tack joakimk!
Har tittat på NSTextStorage, men inte tidigare hittat metoden - textStorage som NSTextView har. Det är inte alltid gott att veta hur saker och ting hör ihop!

Vänligen, Ylan

  • Oregistrerad
  • 2006-03-25 11:26

Jag är också relativt ny på Objective-C så det gäller att utnyttja sådana här tillfällen för att lära sig mer. Efter att tänkt efter det Ylan sade som om performance kom jag fram till att man borde nog göra någonting som det här istället:

- (IBAction)checkText:(id)sender
{
  NSString *text = [myTextView string];
  unsigned int length = [text length];
  
  if (length > 0)
  {
    unichar *buffer = malloc(length * sizeof(unichar));

    if (buffer != NULL)
    {
      [[myTextView string] getCharacters: buffer];
      unsigned int index;
    
      for (index = 0; index < length; index++)
      {
        if (buffer[index] == 'a')
        {
          NSLog(@"Found an a...\n");
        }
      }
      
      free(buffer);
    }
  }
}
  • Medlem
  • Mölndal
  • 2006-03-25 18:04
Ursprungligen av Ylan:

Tack joakimk!
Har tittat på NSTextStorage, men inte tidigare hittat metoden - textStorage som NSTextView har.

Då måste du ha missat mitt första svar på din fråga. Men det kanske ratades för att det inte innehöll komplett kod.

  • Medlem
  • Stockholm
  • 2006-03-25 22:18
Ursprungligen av memark:

Då måste du ha missat mitt första svar på din fråga. Men det kanske ratades för att det inte innehöll komplett kod.

Tittade litet slarvigt och såg -string och -char och tänkte att det inte var något för mig. Hade inte riktigt kopplat att NSTextStorage var en subklass till NSMutableAttributedString!

Det är mycket som man nästan förstår!

Vänligen, Ylan

  • Medlem
  • Mölndal
  • 2006-03-25 08:34

Jag kom just på varför jag inte gillar developer-dokumentationen. Den visar ju inte ärvda metoder. För att få reda på att NSTextView har en string-metod måste man även läsa igenom dess superklass?

  • Medlem
  • Stockholm
  • 2006-03-25 08:42
Ursprungligen av memark:

Jag kom just på varför jag inte gillar developer-dokumentationen. Den visar ju inte ärvda metoder. För att få reda på att NSTextView har en string-metod måste man även läsa igenom dess superklass?

Ja, subklassen ärver ju metoder och instansvariabler, det besparar inte bara kod, utan också text i dokumentationen . Dock finns det ju direktlänkar till superklasserna högst upp på varje klass sida! Men jag håller med dig.

Inte helt OT:

Jag vill extrahera formatterad text från en NSTextView. Hur gör jag det bra, ser ingen lämplig metod. -RTFFromRange returnerar ett NSDataobjekt! Hittar ingen -attributedString-metod.

Någon som vet?

Vänligen, Ylan

Tack för hjälpen. Ni har löst problemet.
Jag får nog träna mer på att slå i dokumentationen.

  • Medlem
  • Göteborg
  • 2006-08-02 22:30

Hittade denna tråden nu..
Jag skulle vilja trycka lite på att det kan vara bra att veta varför man gör något. Dvs hur mycket skall läsas från NSTextViewen? Ifall det inte är rikigt mycket tror jag det är bäst att koda den enklaste koden man kan (inom rimliga gränser dvs inga exponentiella algoritmer) annars tror jag Omnigroup har en snabb strängläsare som går att ladda ner.

1
Bevaka tråden