Μετάβαση στο περιεχόμενο


Φωτογραφία

Βοήθεια σχετικά με strings


  • Παρακαλούμε συνδεθείτε για να απαντήσετε
16 μηνύματα σε αυτό το θέμα

#1   mixahlos

mixahlos

    iPH newbie

  • 10 μηνύματα
  • Φύλο: Δ/Α

Δημοσίευση 12/01/2012 - 18:39

καλησπέρα,
προσπαθώ να φτιάξω έναν RSS reader,
όλα είναι οκ με το parsing αλλά έχω τό εξής πρόβλημα.
όταν αποθηκεύω σε ενα string ένα node που περιέχει για παράδειγμα απόστροφο ( ' ) το string σπάει και μου αποθηκεύει το κείμενο απο την απόστροφο και μετά.

παράδειγμα :
όταν ο τίλος είναι : " Italy Leader, Monti, Tells Germany Austerity Isn’t Enough "
τότε μου αποθηκεύει στο στρίνγ μου μόνο το : " t Enough "
όπως ακριβώς εδώ : iphone screenshot
προφανώς κάπως πρέπει να χειριστώ τους χαρακτήρες αυτούς, αλλά δυστυχώς δε γνωρίζω πως.

Αν κάποιος γνωρίζει πως, θα το εκτιμούσα.

ευχαριστώ.

Ad

Ad

Team
iPhoneHellas
3,1416 μηνύματα
Twitter: @android
Φύλο: Όπως το δει κανείς
Κινητό: Android
Tablet: Για τα κουνούπια

Γιατί να γίνετε μέλη;

#2   MihalisTsoukalos

MihalisTsoukalos

    iPH User

  • 136 μηνύματα
  • Twitter:@mactsouk
  • Φύλο: Άντρας
  • Κινητό: iPhone 5
  • Tablet:iPad mini

Δημοσίευση 12/01/2012 - 20:43

Θα πρέπει να μας δείξεις τις εντολές που χρησιμοποιείς.

φιλικά,

#3   mixahlos

mixahlos

    iPH newbie

  • 10 μηνύματα
  • Φύλο: Δ/Α

Δημοσίευση 12/01/2012 - 23:43

Θα πρέπει να μας δείξεις τις εντολές που χρησιμοποιείς.

φιλικά,


είμαι εντελώς αρχάριος στο θέμα ios έχω 3 ημέρες που ασχολούμαι, ευχαριστώ για την όποια βοήθεια.
ελπίζω o παρακάτω κώδικας να σας καλύπτει.

-(id) loadXMLByURL:(NSString *)urlString
{
    rssFeeds            = [[NSMutableArray alloc] init];
    NSURL *url          = [NSURL URLWithString:urlString];
    NSData  *data       = [[NSData alloc] initWithContentsOfURL:url];
    xmlParser           = [[NSXMLParser alloc] initWithData:data];
    [xmlParser setDelegate:self];
    [xmlParser parse];
    return self;
}


- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    if ([elementname isEqualToString:@"item"])
    {
        currentFeed = [rssReader alloc];
    }
}

- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    if ([elementname isEqualToString:@"title"])
    {
        currentFeed.rssTitle = str1;
    }
    if ([elementname isEqualToString:@"description"])
    {
        currentFeed.rssDescription = currentNodeContent;
    }
    if ([elementname isEqualToString:@"pubDate"])
    {
        currentFeed.rsspubDate = currentNodeContent;
    }
    if ([elementname isEqualToString:@"item"])
    {
        [rssFeeds addObject:currentFeed];
        currentFeed = nil;
        currentNodeContent = nil;
    }
}

- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    currentNodeContent = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [[xmlParser rssFeeds] count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    INrssCell *cell = (INrssCell *)[tableView dequeueReusableCellWithIdentifier:@"ingrCell"];
    rssReader *currectFeed = [xmlParser.rssFeeds objectAtIndex:indexPath.row];
    cell.titleLbl.text = currectFeed.rssTitle;
    cell.dateLbl.text = currectFeed.rsspubDate;
    cell.descLbl.text = currectFeed.rssDescription;
    return cell;
}

Ευχαριστώ εκ των προτέρων

#4   iKostis

iKostis

    iPH Enthousiast

  • 361 μηνύματα
  • Φύλο: Άντρας

Δημοσίευση 13/01/2012 - 00:14

Στις περισσότερες γλώσσες προγραμματισμού χρησιμοποιείται το "\" , δοκίμασες να το βάλεις πριν την απόστροφο;

EDIT: Μόλις το δοκίμασα μ' ένα πρόχειρο label και δουλεύει κανονικά:
label.text = @" Italy Leader, Monti, Tells Germany Austerity Isn\'t Enough ";

Εκτυπώνει: Italy Leader, Monti, Tells Germany Austerity Isn't Enough

;)

Τελευταία επεξεργασία από: iKostis, 13/01/2012 - 00:21


#5   iKostis

iKostis

    iPH Enthousiast

  • 361 μηνύματα
  • Φύλο: Άντρας

Δημοσίευση 13/01/2012 - 00:34

Βασικά άκυρο το προηγούμενο post γιατί δεν εχεις σταθερό string. Σου παραθέτω ένα απλό παράδειγμα που έφτιαξα μήπως σε βοηθήσει:

- (void)viewDidLoad
{
[super viewDidLoad];
NSString *new = @"Italy Leader, Monti, Tells Germany Austerity Isn\'t Enoug";
label.text = [new stringByReplacingOccurrencesOfString:@"'" withString:@"\'"];
}

Εσένα σ' ενδιαφέρει η δεύτερη σειρά...όπου αντί για το new θα έχεις το αντίστοιχο string που θέλεις να μετατρέψεις!

Τελευταία επεξεργασία από: iKostis, 13/01/2012 - 00:35


#6   mixahlos

mixahlos

    iPH newbie

  • 10 μηνύματα
  • Φύλο: Δ/Α

Δημοσίευση 13/01/2012 - 00:52

Στις περισσότερες γλώσσες προγραμματισμού χρησιμοποιείται το "\" , δοκίμασες να το βάλεις πριν την απόστροφο;

EDIT: Μόλις το δοκίμασα μ' ένα πρόχειρο label και δουλεύει κανονικά:
label.text = @" Italy Leader, Monti, Tells Germany Austerity Isn\'t Enough ";

Εκτυπώνει: Italy Leader, Monti, Tells Germany Austerity Isn't Enough

;)


ευχαριστώ φίλε μου,
ναι το γνωρίζω αυτό απο την php που ξέρω,
το θέμα είναι πως το content δεν είναι στατικό και αυτό που λές πρέπει να γίνει πργογραμματιστικά
η αλήθεια είναι πως δοκίμασα να βάλω τις παρακάτω γραμμές κώδικά αλλά χωρίς αποτέλεσμα :

currentNodeContent = (NSMutableString *) [string stringByReplacingOccurrencesOfString:@"'" withString:@"\'"];
ή
currentNodeContent = (NSMutableString *) [string stringByReplacingOccurrencesOfString:@"'" withString:@" "];
Στην παρακάτω μέθοδο :
- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    currentNodeContent = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
 }

όσο έγραφα αυτό το post δοκίμασα με feeds απο ελληνικά sites και παρατήρησα πως στο detail view που έχω μου το κάνει αλλά χωρίς να υπάρχει κάποιος συγκεκριμένος χαρακτήρας, όπως στο screenshot screenshot

ευχαριστώ

#7   iKostis

iKostis

    iPH Enthousiast

  • 361 μηνύματα
  • Φύλο: Άντρας

Δημοσίευση 13/01/2012 - 01:35

Βάλε ένα NSLog κάτω απο το currentNodeContent. Αν δεις και τυπώνει πχ. " Italy Leader, Monti, Tells Germany Austerity Isn" και μετά το "t Enough " τότε δοκίμασε να κάνεις append το string.

#8   mixahlos

mixahlos

    iPH newbie

  • 10 μηνύματα
  • Φύλο: Δ/Α

Δημοσίευση 13/01/2012 - 01:53

Βάλε ένα NSLog κάτω απο το currentNodeContent. Αν δεις και τυπώνει πχ. " Italy Leader, Monti, Tells Germany Austerity Isn" και μετά το "t Enough " τότε δοκίμασε να κάνεις append το string.


και το NSLog έτσι μου τα τυπώνει, κομμένα.
προφανώς το πρόβλημα είναι στο parsing? και όχι όταν γίνεται ανάθεση στη μεταβλητή και μετά με τη σειρά του στο label.
υπάρχει πιθανότητα να παίζει κάτι με encoding ?
αλλά απ' όσο γνωρίζω UTF-8 παίζει το ios-sdk.

#9   mixahlos

mixahlos

    iPH newbie

  • 10 μηνύματα
  • Φύλο: Δ/Α

Δημοσίευση 13/01/2012 - 04:42

Ειλικρινά δε μπορώ να καταλάβω τη λογική του προβλήματος ...

Ανέβασα το παρακάτω δικό μου xml και έβαλα διάφορους χαρακτήρες και ελληνικούς τονισμένους :
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<item>
	<title>title 1 περιγ;ραφή 1</title>
	<description>Description 1 Description 1 ' Description 1Description 1Description 1 περιγραφή 1</description>
	<pubDate>01.01.1900</pubDate>
</item>
<item>
	<title>title 2 ` title 2</title>
	<description>περιγραφή 2 Description 2 Description 2 Description 2 ` Description 2Description 2Description 2 περιγραφή 2</description>
	<pubDate>01.01.2000</pubDate>
</item>
<item>
	<title>title 3 " title 3</title>
	<description>Description 3 Description 3"Description 3" Description 3Description 3 Description 3</description>
	<pubDate>01.01.2009</pubDate>
</item>
<item>
	<title>title 4 <img src='http://www.iphonehellas.gr/forum/public/style_emoticons/<#EMO_DIR#>/sleep.gif' class='bbc_emoticon' alt='-_-' /> ά έ ή ί ό ύ ώ ϊ Ά Έ Ή Ί Ό Ύ Ώ Ϊ <img src='http://www.iphonehellas.gr/forum/public/style_emoticons/<#EMO_DIR#>/sleep.gif' class='bbc_emoticon' alt='-_-' /> title 4</title>
	<description>Description 4  \" \` \? \' \; " ` ? ' ;</description>
	<pubDate>01.01.2009</pubDate>
</item>
</channel>
</rss>

και ιδού τα αποτελέσματα :
UITableView στον τίτλο 1 ο οποίος έπρεπε να είναι "title 1 περιγ;ραφή 1" εμφανίζει μόνο το "περιγ;ραφή 1"
Detail of title1 εδώ το label του description έπρεπε να είναι "Description 1 Description 1 ' Description 1Description 1Description 1 περιγραφή 1" και είναι "περιγραφή 1"
Detail of title 2
Detail of title 3
Detail of title 4

αν κάποιος μπορεί να σκεφτέι κάτι θα το εκτιμούσα ...

Ευχαριστώ και καλημέρα σας.

#10   iKostis

iKostis

    iPH Enthousiast

  • 361 μηνύματα
  • Φύλο: Άντρας

Δημοσίευση 13/01/2012 - 10:42

Επειδή κι εγώ παράλληλα δουλεύω ένα project που τραβάει δεδομένα απο xml πέρασα στη βάση το "title 4 -_- ά έ ή" και κατά το τρέξιμο της εφαρμογής μου το εμφάνισε κανονικά

Για του λόγου το αληθές:
Αναρτημένη εικόνα

Uploaded with ImageShack.us

Το κώδικα για το xml parsing που τον βρήκες;

#11   iKostis

iKostis

    iPH Enthousiast

  • 361 μηνύματα
  • Φύλο: Άντρας

Δημοσίευση 13/01/2012 - 11:03

Αντικατέστησε τη μεθοδο σου με αυτή:

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {

if(!currentNodeContent)
currentNodeContent = [[NSMutableString alloc] initWithString:string];
else
[currentNodeContent appendString:string];

NSLog(@"Processing Value: %@", currentNodeContent);

}

Αν και πάλι έχεις πρόβλημα θα σε συμβούλευα να δεις το παρακάτω άρθρο:
http://www.iphonesdk...-xml-files.html

Κατέβασε το κώδικά του και προσάρμοσέ τον στο δικό σου...εγώ αυτό έκανα!

#12   mixahlos

mixahlos

    iPH newbie

  • 10 μηνύματα
  • Φύλο: Δ/Α

Δημοσίευση 13/01/2012 - 16:31

Αντικατέστησε τη μεθοδο σου με αυτή:

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {

if(!currentNodeContent)
currentNodeContent = [[NSMutableString alloc] initWithString:string];
else
[currentNodeContent appendString:string];

NSLog(@"Processing Value: %@", currentNodeContent);

}

Αν και πάλι έχεις πρόβλημα θα σε συμβούλευα να δεις το παρακάτω άρθρο:
http://www.iphonesdk...-xml-files.html

Κατέβασε το κώδικά του και προσάρμοσέ τον στο δικό σου...εγώ αυτό έκανα!



Ευχαριστώ για το ενδιαφέρον και την απάντηση,
Τον parser μου, τον έφτιαξα googlάροντας και διαβάζοντας διάφορα tutorials...

πρόσεξε να δεις τι γίνεται ...
εγώ έχω ήδη δηλώσει το object που κρατάει τα rssFeeds...

#import <Foundation/Foundation.h>

@interface rssReader : NSObject <NSXMLParserDelegate> {
    NSString *rssTitle;
    NSString *rssDescription;
    NSString *rssPubDate;
}

@property (retain, nonatomic) NSString *rssTitle;
@property (retain, nonatomic) NSString *rssDescription;
@property (retain, nonatomic) NSString *rsspubDate;

@end

επίσης έχω δηλώσει σαν class το xmlparser μου...

#import <Foundation/Foundation.h>
#import "rssReader.h"

@interface rssXMLParser : NSObject {
    
    NSMutableString *currentNodeContent;
    NSMutableArray  *rssFeeds;
    NSXMLParser     *xmlParser;
    rssReader       *currentFeed;
}

@property (readonly, retain) NSMutableArray *rssFeeds;

-(id) loadXMLByURL:(NSString *)urlString;

@end

που λογικά σημαίνει η συνθήκη :
if(!currentNodeContent) 
currentNodeContent = [[NSMutableString alloc] initWithString:string];
θα είναι πάντα false...
και θα μου κάνει παντα add και content απο elements τα οποία δε με ενδιαφέρουν και δεν τα χρησημοποιώ
με αποτέλεσμα το NSLog να μου εμφανίζει τα εξής :

In.gr Νέα: Ελλάδα
2012-01-13 15:39:33.981 evros01[8877:f803] Processing Value:

In.gr Νέα: Ελλάδα

2012-01-13 15:39:34.904 evros01[8877:f803] Processing Value:

In.gr Νέα: Ελλάδα
In.gr
2012-01-13 15:39:35.827 evros01[8877:f803] Processing Value:

In.gr Νέα: Ελλάδα
In.gr Νέα: Ελλάδα

... ... ... ...



In.gr Νέα: Ελλάδα
In.gr Νέα: Ελλάδα
http://rss.in.gr/Net...d=250&la=1&si=1
Greek
admin@netvolution.net
admin@netvolution.net
Fri, 13 Jan 2012 13:28:32 GMT
http://backend.userland.com/rss
Netvolution WCM
15

Ένα ακόμα παράνομο καζίνο εντόπισε στην Αττική η Αστυνομία
2012-01-13 15:40:21.897 evros01[8877:f803] Processing Value:

In.gr Νέα: Ελλάδα
In.gr Νέα: Ελλάδα
http://rss.in.gr/Net...d=250&la=1&si=1
Greek
admin@netvolution.net
admin@netvolution.net
Fri, 13 Jan 2012 13:28:32 GMT
http://backend.userland.com/rss
Netvolution WCM
15

Ένα ακόμα παράνομο καζίνο εντόπισε στην Αττική η Αστυνομία

2012-01-13 15:40:22.541 evros01[8877:f803] Processing Value:

In.gr Νέα: Ελλάδα
In.gr Νέα: Ελλάδα
http://rss.in.gr/Net...d=250&la=1&si=1
Greek
admin@netvolution.net
admin@netvolution.net
Fri, 13 Jan 2012 13:28:32 GMT
http://backend.userland.com/rss
Netvolution WCM
15

Ένα ακόμα παράνομο καζίνο εντόπισε στην Αττική η Αστυνομία
Παράνομο «καζίνο», επί της λεωφ. Συγγρού στο Νέο Κόσμο εντόπισαν οι αρμόδιες υπηρεσίες της ΕΛ.ΑΣ. στο πλαίσιο οργανωμένης επιχείρησης. Συνελήφθησαν 27 άτομα και κατα
2012-01-13 15:40:28.218 evros01[8877:f803] Processing Value:

In.gr Νέα: Ελλάδα
In.gr Νέα: Ελλάδα
http://rss.in.gr/Net...d=250&la=1&si=1
Greek
admin@netvolution.net
admin@netvolution.net
Fri, 13 Jan 2012 13:28:32 GMT
http://backend.userland.com/rss
Netvolution WCM
15

Ένα ακόμα παράνομο καζίνο εντόπισε στην Αττική η Αστυνομία
Παράνομο «καζίνο», επί της λεωφ. Συγγρού στο Νέο Κόσμο εντόπισαν οι αρμόδιες υπηρεσίες της ΕΛ.ΑΣ. στο πλαίσιο οργανωμένης επιχείρησης. Συνελήφθησαν 27 άτομα και κατασχέθηκαν 95 ηλεκτρονικά μηχανήματα («φρουτάκια»), μία ρουλέτα, 13.500 ευρώ και ένα τηλεχειριστήριο ενεργοποίησης και απενεργοποίησης των παιγνιομηχανημάτων.


Αλλά αν προσέξεις ...
το description που μου κόβει βλέπω τώρα οτι μου το φέρνει σε parts... αν πρσέξεις το nslog θα το καταλάβεις ...

Τεσπα,
λέω να το κάνω όλο απο την αρχή σύμφωνα με το tutorial που μου έστειλες και βλέπω μετά.

#13   mixahlos

mixahlos

    iPH newbie

  • 10 μηνύματα
  • Φύλο: Δ/Α

Δημοσίευση 20/01/2012 - 07:13

Λοιπόν, τελικά κατάφερα να δουλέψει, θα ήθελα όμως τη γνώμη σας όμως πάνω σε αυτό.
Παραθέτω τον κώδικα που μου λειτούργησε (όλα τα άλλα παραμένουν ίδια) :

- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    if ([elementname isEqualToString:@"item"])
    {
        currentFeed = [[rssReader alloc] init];
    }
}

- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    NSLog(@"Element Found : %@", elementname);
    if ([elementname isEqualToString:@"title"])
    {
        NSLog(@"Adding ::%@:: to Title", currentNodeContent);
        currentFeed.rssTitle = (NSMutableString *) [currentNodeContent stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
        currentNodeContent = nil;
    }
     else if ([elementname isEqualToString:@"description"])
    {
        NSLog(@"Adding ::%@:: to Description", currentNodeContent);
        currentFeed.rssDescription = (NSMutableString *) [currentNodeContent stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
        currentNodeContent = nil;
    }
    else if ([elementname isEqualToString:@"pubDate"])
    {
        currentFeed.rsspubDate = currentNodeContent;
        currentNodeContent = nil;
    }
    else if ([elementname isEqualToString:@"item"])
    {
        [rssFeeds addObject:currentFeed];
        currentFeed = nil;
        currentNodeContent = nil;
    }

}


- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { 
    NSLog(@"Processing String Value: %@", string);

        if(!currentNodeContent) 
            currentNodeContent = [[NSMutableString alloc] initWithString:string];
        else
            [currentNodeContent appendString:string];

        NSLog(@"Processing Value: %@", currentNodeContent);
}

Στην ουσία πρόσθεσα 2 γραμμές κώδικα σε κάθε element που τελείωνε και το αποθήκευα. οι 2 γραμμές είναι :
currentFeed.rssTitle = (NSMutableString *) [currentNodeContent stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
        currentNodeContent = nil;

Τη 2η γραμμή, δλδ να κάνω nil το currentNodeContent την έβαλα γιατί αν δεν το έκανα, μου έκανε την 1η φορά init το currentNodeContent και μετά απλά πρόσθετε όλα τα περιεχόμενα των elements που έβρισκε μεχρι να φτάσω στο τελευταίο και να κάνω addObject.

Την 1η γραμμή κώδικα την έβαλα καθώς τα περιεχόμενα μου έρχονταν με κενά, line breaks κλπ.

Η τεράστια απορία μου είναι η εξής :
Όταν μπαίνω στην foundCharacters παρατηρώ πως το string δεν είναι ποτέ ολόκληρο, πάντα πρέπει να τρέξει 2-3 φορές και με το appendString να πάρω το ολοκληρομένο string.
Γιατί συμβαίνει αυτό και δεν φένει με τη μία όλα τα περιεχόμενα που βρήκε στο element ?


Γενικά θα ήθελα να ακούσω την άποψή σας όσοι παρακολουθήσατε την προσπάθειά μου απο την αρχή.

Ευχαριστώ όλους για τις συμβουλές σας.

Τελευταία επεξεργασία από: mixahlos, 20/01/2012 - 07:19


#14   Lefteris23

Lefteris23

    iPH Addict

  • 624 μηνύματα
  • Twitter:@LefterisHaritou
  • Φύλο: Άντρας
  • Κινητό: iPhone 5
  • Tablet:iPad 3

Δημοσίευση 20/01/2012 - 12:47

Πρώτον δεν καταλαβαίνω γιατί χρησιμοποιείς mutableString σε περιεχόμενο που είναι non mutable (δεν σου βγάζει θαυμαστικό το Xcode ?!?)
Το rssDescription π.χ. απότι βλέπω στον κώδικα σου είναι non mutable (NSString), αλλά εσύ το κάνεις cast σε mutable...

Δεύτερον και σημαντικότερο είναι να δεις που είναι το πρόβλημα.

Δηλαδή αν το πρόβλημα είναι στο να περνάει o parser την σωστή τιμή στο string object σου ή στο πως αυτό γίνεται render.

Τρίτον δεν χρειάζεται να κάνεις nil το currentNodeContent, απλά κάντο [currentNodeContent setString:@""]; και μάλιστα στο τέλος του delegate method

- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName

και όχι χωριστά σε κάθε μία από τις περιπτώσεις if (ποιος ο λόγος να το γράφεις 4-5 φορές ?)

Κατά τα άλλα αυτό που κάνεις είναι αυτό που λέει η μέθος που χρησιμοποιείς, δλδ αφαιρείς τα κενά και τα new line characters από το string σου.
Αν θέλεις να τα κρατήσεις δοκίμασε αυτό:

stringByReplacingPercentEscapesUsingEncoding

Δηλαδή:
currentFeed.rssDescription = [currentNodeContent stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];


#15   mixahlos

mixahlos

    iPH newbie

  • 10 μηνύματα
  • Φύλο: Δ/Α

Δημοσίευση 20/01/2012 - 15:08

Πρώτον δεν καταλαβαίνω γιατί χρησιμοποιείς mutableString σε περιεχόμενο που είναι non mutable (δεν σου βγάζει θαυμαστικό το Xcode ?!?)
Το rssDescription π.χ. απότι βλέπω στον κώδικα σου είναι non mutable (NSString), αλλά εσύ το κάνεις cast σε mutable...

Δεύτερον και σημαντικότερο είναι να δεις που είναι το πρόβλημα.

Δηλαδή αν το πρόβλημα είναι στο να περνάει o parser την σωστή τιμή στο string object σου ή στο πως αυτό γίνεται render.

Τρίτον δεν χρειάζεται να κάνεις nil το currentNodeContent, απλά κάντο [currentNodeContent setString:@""]; και μάλιστα στο τέλος του delegate method

- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName

και όχι χωριστά σε κάθε μία από τις περιπτώσεις if (ποιος ο λόγος να το γράφεις 4-5 φορές ?)

Κατά τα άλλα αυτό που κάνεις είναι αυτό που λέει η μέθος που χρησιμοποιείς, δλδ αφαιρείς τα κενά και τα new line characters από το string σου.
Αν θέλεις να τα κρατήσεις δοκίμασε αυτό:

stringByReplacingPercentEscapesUsingEncoding

Δηλαδή:
currentFeed.rssDescription = [currentNodeContent stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];


Καλησπέρα,
Αρχικά να σου πω πως έχεις δίκιο, αλλά όταν έχεις ξεκινίσει απο το πρωί και έχει φτάσει το άλλο πρωί πιστεύω να καταλαβαίνεις πως ο εγκέφαλος αρνείται να σου παρέχει τη δέουσα βοήθεια ...
τώρα αν κάνω αυτό που πρότεινες στο description είναι οκ, αλλά αν το βάλω στο title μου βγάζει "..." sto cell του tableview και το xcode όντως δε μου βγάζει warning ...
Βασικά για να καταλάβεις, όλο αυτό το τράβηξα απο ένα tutorial το οποίο είναι εδώ.

Για το mutablestring στο οποίο αναφέρεσαι πρόσεξε να δεις τι συμβαίνει.
to current NodeContent είναι δηλωμένο σαν nsmutablestring, και ο αρχικός κώδικας στην foundCharacters αν παρατηρήσεις το tutorial ήταν :
- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    currentNodeContent = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}

Αυτό είχε τα αποτελέσματα που περιγράφω στο 1ο μου ποστ και ενώ νόμιζα πως φταίει κάποιος escape χαρακτήρας τελικά παρατήρησα πως για το element "description" ενώ λογικά θα έπρεπε να μπεί μια φορα στο foundCharacters και να περιέχει όλο το περιεχόμενο το element, ένα NSLog μου έδειξε πως έμπαινε 2-3 φορές.
Έτσι κάθε φορά που που έμπαινα στην foundcharacters δεν κρατούσε το προηγούμενο string και το αποτέλεσμα ήταν να μου φαίρνει πάντα το τελευταίο.
Για να καταλάβεις απο το NSLog είδα πως το strng κάθε φορά που έμπαινε ήταν ως εξής :
1η φορά :
Lorem ipsum dolor sit amet, consectetur adipisicing elit
2η φορά
, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ulla
3η φορά
mco laboris nisi ut aliquip ex ea commodo consequat.

με αποτέλεσμα το label να μου παίρνει την τελευταία τιμή δλδ το : mco laboris nisi ut aliquip ex ea commodo consequat.

και αυτή ήταν η ερώτησή μου στο προηγούμενο ποστ, γιατί μπαίνει τόσες φορές στη foundCharacters ?
απο κει ξεκίνησε το πρόβλημα και άρχισα να ψάχνομαι για να καταλήξω εδώ.

Ad

Ad

Team
iPhoneHellas
3,1416 μηνύματα
Twitter: @android
Φύλο: Όπως το δει κανείς
Κινητό: Android
Tablet: Για τα κουνούπια

Γιατί να γίνετε μέλη;



Χρήστες που διαβάζουν αυτό το θέμα: 2

0 μέλη, 2 επισκέπτες, 0 ανώνυμοι χρήστες