XML-разбор iOS -NSUnknownKeyException - PullRequest
       0

XML-разбор iOS -NSUnknownKeyException

0 голосов
/ 04 декабря 2011

РЕДАКТИРОВАТЬ: я обнаружил, что URL-адрес был отправлен строкой, поэтому я изменил его на NSURL, и теперь он анализирует некоторые данные, а затем нажимает "NSUnknownKeyException" и SIGABRT.Остальной код такой же ... спасибо !!

Привет, я пытаюсь запустить простой парсер XML в iOS.и каждый раз, когда я запускаю его, я получаю SIGABRT в основном с ошибкой: NSInvalidArgument

Я использовал простое руководство, и вот мой XMLParser:

#import "XMLParser.h"
#import "Video.h"

@implementation XMLParser
@synthesize video, videos;

- (XMLParser *) initXMLParser {
    //[super init];
    // init array of user objects 
    videos = [[NSMutableArray alloc] init];
    return self;
}

- (void)parser:(NSXMLParser *)parser 
didStartElement:(NSString *)elementName 
  namespaceURI:(NSString *)namespaceURI 
 qualifiedName:(NSString *)qualifiedName 
    attributes:(NSDictionary *)attributeDict {

    if ([elementName isEqualToString:@"video"]) {
        NSLog(@"video element found – create a new instance of User class...");
        video = [[Video alloc] init];
        //We do not have any attributes in the user elements, but if
        // you do, you can extract them here: 
        // user.att = [[attributeDict objectForKey:@"<att name>"] ...];
    }
}



// XMLParser.m
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
    if (!currentElementValue) {
        // init the ad hoc string with the value     
        currentElementValue = [[NSMutableString alloc] initWithString:string];
    } else {
        // append value to the ad hoc string    
        [currentElementValue appendString:string];
    }
    NSLog(@"Processing value for : %@", string);
}  



//XMLParser.m
- (void)parser:(NSXMLParser *)parser 
 didEndElement:(NSString *)elementName
  namespaceURI:(NSString *)namespaceURI 
 qualifiedName:(NSString *)qName {

    if ([elementName isEqualToString:@"videos"]) {
        // We reached the end of the XML document
        return;
    }

    if ([elementName isEqualToString:@"video"]) {
        // We are done with user entry – add the parsed user 
        // object to our user array
        [videos addObject:video];
        // release user object
       // [video release];
        video = nil;
    } else {
        // The parser hit one of the element values. 
        // This syntax is possible because User object 
        // property names match the XML user element names   
        [video setValue:currentElementValue forKey:elementName];
    }

   // [currentElementValue release];
    currentElementValue = nil;
}

@end

// end of XMLParser.m file

это мой файл video.h, чтобы получить представление о моем типе данных ..

#import <UIKit/UIKit.h>


@interface Video : NSObject {

    NSInteger videoID;
    NSString *videotitle;   //Same name as the Entity Name.
    NSString *description;  //Same name as the Entity Name.
    NSString *userid;
    NSString *uploadtime;
    NSString *channel;
    NSInteger *viewed;
    NSInteger *liked;
    NSString *videosource;
    NSString *smallthumbnail;   //Same name as the Entity Name.
    NSString *largethumbnail;


}

@property (nonatomic, readwrite) NSInteger videoID;
@property (nonatomic, retain) NSString *videotitle;
@property (nonatomic, retain) NSString *description;
@property (nonatomic, retain) NSString *userid;
@property (nonatomic, retain) NSString *uploadtime;
@property (nonatomic, retain) NSString *channel;
@property (nonatomic, readwrite) NSInteger *viewed;
@property (nonatomic, readwrite) NSInteger *liked;
@property (nonatomic, retain) NSString *videosource;
@property (nonatomic, retain) NSString *smallthumbnail;
@property (nonatomic, retain) NSString *largethumbnail;

@ end

также обратите внимание, что это в iOs 5, а вот мой XML:

<videos>
<video id="1">
<videotitle>Lync - Find and Add a Contact</videotitle>
<description>Training tutorial for Lync</description>
<userid>USER.CORP_LDAP.i818800</userid>
<uploadtime>1321555939598</uploadtime>
<channel/>
<viewed>0</viewed>
<liked>0</liked>
<videosource>
https://saptube.pal.sap.corp/vod/media/FINAL_FindAndAddAcontact20111117105156.mp4
</videosource>
<smallthumbnail>
https://saptube.pal.sap.corp/vod/rtmp/FINAL_FindAndAddAcontact20111117105156.jpg
</smallthumbnail>
<largthumbnail>
https://saptube.pal.sap.corp/vod/rtmphd/FINAL_FindAndAddAcontact20111117105156.jpg
</largthumbnail>
</video>
</videos>

1 Ответ

0 голосов
/ 09 декабря 2011

В вашем видео классе, пожалуйста, реализуйте следующую функцию:

- (void) setValue:(id)value forUndefinedKey:(NSString *)key {
    NSLog(@"Missing key %@", key);
}

Затем вы можете увидеть, на какой ключ ваш класс не реагирует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...