ok, se pare ca a venit randul meu sa pun intrebari, tot referitor la UIViewTable.
Am urmatoarea structura: un Table View ca Root Controller si un Table View child. Codul de la “child” este mai jos (am niște NSLog-uri în text, au doar rolul să mă ajute in debuging, nu le băgați în seamă). View-ul “child” este generat programatic, nu din Nib. Problemele pe care le am sunt 2:
1. View-ul child mi se incarcă corect și îmi afisează primele 9 randuri. Dacă dau scroll in jos, îmi afiseaza corect pană când ajunge la ultimul element al listei de afisat (array-ul listSigns), după care dă eroare in procedura ‘cellForRowAtIndexPath’: variabila “row” nu iese din range (deci ar trebui sa existe [listSigns objectAtIndex:row]), dar tSign se comportă de parcă ar fi nil, de parcă ‘listSigns’ ar fi inexistent/nealocat/released. După părerea mea, nu am dat nici un [listSigns release] suplimentar…. La fel se comportă daca incerc sa fac scroll în sus (când sunt la începutul listei): row devine 0 (corect, după mine) dar listSigns parcă este released, nu mai conține nimic. Bineînțeles, View-ul părinte este definit similar și merge foarte bine…când ajunge la capăt face bounce back, așa cum trebuie.
2. imaginile incărcate sunt prea mari, nu sunt scalate automat (toate au aceeasi mărime). bineînțeles, pot să umblu la mărimea iaginii, să a micșorez, dar oare nu se pot scala automat, în program, astfel încât sa încapă în rând?
Inteleg ca listSigns contine obiecte TSign, dar in cellForRowAtIndexPath nu trebuie sa umbli asupra arrayului. tSign este un pointer catre listSigns, stergi pointerul, se sterge si din array. E de ajuns sa-l folosesti si sa-l lasi asa.
Banuiesc ca vroiai sa-l stergi pentru ca l-ai initializat, dar de ce sa initializezi un TSign nou si gol ca apoi sa-l suprascrii cu unul din listSigns? Incearca asa:
Stie cineva cum pot afisa un text cu new line-uri? \n si \r
se pare ca imi apar caracterele astea in loc sa faca new line. folosesc UITextView
Cum ai scris ?
‘\n text’ sau ‘\ntext’ - normal este ‘\ntext’ și ‘\n\ntext’ etc… unde ‘text’ este ceea ce vrei tu să scri. Asta cu referire la la .strings.
Încearcă și cum spune @Fmac mai sus ; ‘%%’ dar parcă aia se folosește în cazuri mai speciale.
[ Modificat: 03 Noiembrie 2009 10:08 AM de Eugen M. ]
Cum este generat textul? din program sau încărcat dintr-un fișier? Mie încărcat dintr-un fișier îmi merge, ceva de genul:
NSString *pathTxt=[[NSBundle mainBundle] pathForResource:@“Test” ofType:@“txt”];
NSString *myTxt=[[NSString alloc] initWithContentsOfFile:pathTxt encoding:NSUTF8StringEncoding error:NULL];
myTextView.text=myTxt;
Daca este generat din program, incearca cu:
NSString *myTxt=[[NSString alloc] initWithCString:“test\n rand2”];
myTextView.text=myTxt;
și toate convențiile de la C se aplică.
Nu am ajuns încă la sqlite:) dar am reținut că este un API C… dacă îl iei din baza de date într-un string C si pe urmă îl faci NSString cu initWithCString în loc să-l încarci direct in NSString?
Da, sqlite returneaza string C, nu NSString, si trebuie convertit. asta fac mai sus, dar am mai incercat o varianta si tot nu vrea:
NSString *aDescription = [[NSString alloc] initWithCString:(char *)sqlite3_column_text(compiledStatement, 2) encoding:NSUTF8StringEncoding];
am incercat si hardcoded si intradevar merge, ma mai uit prin metodele NSStringului sa vad ce posibilitati mai sunt. bine ca am depistat unde e problema.
NSString *aDescription = @“abcd\nefgh”;
eu am o altă problemă cu un UITextView: nu pot să-l fac scrollable. Încarc textul dintr-un fișier, se vede bine doar cât încape în TextView. Am atașat 2 imagini cu setările din Interface Builder, poate cineva mai experimentat decât mine poate să-mi dea o idee.