Modificare un carattere a scelta all'interno di una UITextView

Ciao a tutti,

sono un neofita di object c e provengo dagli ambienti di sviluppo windows.

Sto iniziando a programmare in object c per iphone e sto avendo delle difficoltà lavorando con le stinghe.

Nello specifico ho delle difficolta nel sostituire dei caratteri all’interno di una stringa.

In Vb6 facevo cosi:

variabilestring=mid(stringa1,2,1)

e in c++ usavo le variabili char e sostituivo cosi:

char[]={‘R’,‘A’,‘N’,‘A’};
stringa1[1]=‘E’;?

se volevo sostituire il secondo carattere della variabile: “stringa1”.
DA RANA–>RENA

Come devo fare in object c?

In obj-c la stringa come in tutti i linguaggi ad oggetti evoluti è un oggetto, in questo caso della classe NSString

Ogni modifica della stringa comporta la costruzione di un nuovo oggetto, quindi nel tuo caso devi partire da rana e costruire un nuovo oggetto.

Per fare quello che hai chiesto potresti ad esempio usare il metodo stringByReplacingOccurrencesOfString in questo modo:

NSString *str1 = @"RANA";
NSString *str2 = [str1 stringByReplacingOccurancesOfString:@"A" withString:@"E" range:2];

(Con anche il range per evitare che venga sostituita anche la seconda ‘A’)
Comunque leggiti la documentazione su questo metodo al link che ti ho passato

Grazie!

Mi sono accorto ora della tua risposta:)

Io ho già risolto usando gli array di variabili char.

Ho dichiarato una variabile char:
char *nome[160];

Quindi:
nome=‘rana’;
nome[2]=‘e’;
Poi tramite l’oggetto NSString l’ho convertita in stringa e scritta sulla UITextView

Cosi si adatta più alle mie esigenze perchè posso spostarmi da un carattere all’altro con un indice numerico.

Come ti sembra questa soluzione?

Si certo in obj puoi anche usare il C puro.
Quindi usi i classici vettori di stringhe e poi trasformi in nsstring con la initWithCString.

Però il codice che hai scritto non può funzionare, ma suppongo tu lo sappia già.
char *nome[160]; non ha senso.

O fai
char nome[160];
oppure
char nome = (char)malloc(160);

Anche nome=‘rana’ non ha senso, al massimo nome=“rana” ma anche cosi è sbagliato. Non puoi assegnare a un puntatore una stringa, dovrai usare un qualcosa come la strcpy() o la sprintf(). Al massimo lo puoi fare in fare di dichiarazione char nome[160] = “rana” e solo così è ammesso.

Ma suppongo tu abbia scritto cosi solo qui sul forum :smiley:

Si Si!!
Ho sbagliato solo qui il codice funziona:)

Precisamente ho scritto cosi:
Dichiarazione:
char testo[160];
int set=0;
Enunciato:
testo[set]=‘r’; //dove set è una variabile intera che uso come indice
NSString *strtesto=[NSString stringWithUTF8String:testo]; //conversione
txttesto.text=strtesto; //scrivo sulla UITextView

Ora ho altri problemi:

Come posso gestire i multi caratteri con variabili char?(se scrivo: “testo[set]=‘è’;” ricevo un errore di overflow)

Inolte non so far apparire il cursore nella mia UITextView

non può darti l’overflow nell’assegnazione del char in quel modo, quello è corretto.
l’overflow te lo darò da altre parti!
comuqnue ogni modifica alla stringa temp non modificherà in automatico anche la nsstring, dovrai ricrearla con la stringWithUTF8String.

comunque guardati questo video: YouTube - UITextView-Cocoa Touch Tutorial

Non so come mai
Alla stringa:


testo[set]='è';

ricevo questo errore:
multi-character character costant
overflow in implicit costant conversion

dopo effettuo la normale conversione a stringa tramite:


NSString *strtesto=[NSString stringWithUTF8String:testo];
txttesto.text=strtesto;

Ti da errore anche se fai testo[0]=‘è’;? Magari set è fuori range

Si anche perchè con un carattere normale va senza problemi!!!

Allora il problema è che il tuo carattere ‘è’ è fuori dalla codifica UTF8.
Prova a convertire la char* in NSString usando il metodo initWithCString:encoding: cambiando il tipo di encoding

Guarda qui: Mac Dev Center: NSString Class Reference

Magari prova con il NSWindowsCP1250StringEncoding

Ma le mie conoscenze nel campo dell’encoding sono molto limitate, ti consiglio di fare delle prove

Allora il problema è che il tuo carattere ‘è’ è fuori dalla codifica UTF8.
Prova a convertire la char* in NSString usando il metodo initWithCString:encoding: cambiando il tipo di encoding

Guarda qui: Mac Dev Center: NSString Class Reference

Magari prova con il NSWindowsCP1250StringEncoding

Ma le mie conoscenze nel campo dell’encoding sono molto limitate, ti consiglio di fare delle prove