Php 尽管有mysql条目,但iOS中的NSArray为空
我一直在尝试用php脚本的xml输出填充Xcode中的数组,以便ios可以连接到mysql。然而,尽管mysql中有信息,我的数组还是会得到一个空值。这一定意味着我的属性部分或者我对xml的解析是错误的,但我真的不知道到底是什么错了(而且再多的注释似乎也没有帮助)。我没有从php或xcode中得到任何错误。有什么想法吗 编辑:我遵循了下面的建议,仍然得到一个空值,尽管我相信它来自我的php…Php 尽管有mysql条目,但iOS中的NSArray为空,php,ios,xml,nsarray,Php,Ios,Xml,Nsarray,我一直在尝试用php脚本的xml输出填充Xcode中的数组,以便ios可以连接到mysql。然而,尽管mysql中有信息,我的数组还是会得到一个空值。这一定意味着我的属性部分或者我对xml的解析是错误的,但我真的不知道到底是什么错了(而且再多的注释似乎也没有帮助)。我没有从php或xcode中得到任何错误。有什么想法吗 编辑:我遵循了下面的建议,仍然得到一个空值,尽管我相信它来自我的php… - (void)viewDidLoad { [super viewDidLoad];
- (void)viewDidLoad
{
[super viewDidLoad];
char *cStr = "YES";
NSString *str3 = [NSString stringWithUTF8String:cStr];
NSString *urlString = [NSString stringWithFormat:@"(censored)", _login];
NSXMLParser *Parser = [[[NSXMLParser alloc] initWithContentsOfURL:[NSURL URLWithString:urlString]] autorelease];
[Parser setDelegate:self];
[Parser parse];
NSDictionary *itemAtIndex =(NSDictionary *)[oneam objectAtIndex:0];
oneam = [[NSMutableArray alloc] init];
if (([[itemAtIndex objectForKey:@"its"]isEqualToString:str3 ])) {
[switch1 setOn:YES animated:YES];
}
else {
[switch1 setOn:NO animated:YES];
}
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
if ( [elementName isEqualToString:@"location"]) {
[oneam addObject:[[NSDictionary alloc] initWithDictionary:attributeDict]];
NSLog(@"The array is %@", oneam);
}
}
这是我的php
<?php
$login = "hello";
$dbh = new PDO('(censored)');
$sql = "SELECT oneam FROM login WHERE username = '$login'";
$q = $dbh->prepare( $sql );
$doc = new DOMDocument();
$r = $doc->createElement( "oneam" );
$doc->appendChild( $r );
foreach ( $q->fetchAll() as $row) {
$e = $doc->createElement( "location" );
$e->setAttribute( 'its', $row['oneam']);
$r->appendChild( $e );
}
print $doc->saveXML();
?>
那么我应该把“oneam=[[NSMutableArray alloc]init];”放在哪里呢。
无论我放在哪里,它似乎都声明为空或空
每当我使用任何类型的数组时,我总是使用惰性初始化,因此如果它为null,则在getter方法中进行初始化,如下所示:
-(NSMutableArray *)oneam
{
if (!_oneam){
_oneam = [[NSMutableArray alloc] init];
}
return _oneam;
}
当我@synthesis时,我确保它的定义如下:
@synthesize oneam = _oneam;
我不知道您是否在其他地方有它们,但是您缺少了我在进行.xml解析时经常使用的两个方法:foundCharacters和didEndElement。我接着看了(全部3个视频——大约40分钟),在几个不同的实例上使用它之后,它真的帮助我理解了如何使用NSXMLParser。也许可以尝试遵循他的方法,看看这是否能帮你解决问题。除非你需要XML,否则我建议你使用JSON。它在整个网络中重量更轻,并且更容易在两侧格式化/解析。您是否检查过“elementName”是否有效?(即不为null)在分配“oneam”数组之前,您就开始解析XML。这就是为什么向其中添加对象是无效的。那么我应该将“oneam=[[NSMutableArray alloc]init];”放在哪里呢。无论我放在哪里,它似乎都声明为空或null…place
oneam=[NSMutableArray]代码>在解析之前,去掉oneam=[[NSMutableArray alloc]init]
在解析器尝试保存到oneam
数组之后,您正在分配oneam
数组,因此oneam
当然将为null。我也尝试了您的方法,它也消除了null错误,但返回时说它现在为空。这是否意味着它来自上面的php?正如我所怀疑的,空值的原因来自php。谢谢你的链接。它帮我指明了正确的方向!啊,好吧,我没有php方面的经验,所以很抱歉,我不能提供更直接的帮助。很高兴你找到了答案。另外,如果你以一种与之前建议的答案无关的方式解决了问题,请确保添加自己的答案并接受它,这样将来出现类似问题的人都会知道你是如何解决的。嗯,我还没有从技术上解决它…所以我编辑了这个问题以反映进展。等我有了,我会的。啊哈!原来是因为我漏掉了我的情妇。你的教程帮我指出了正确的方向,所以我给了你荣誉