大家好,我遇到了一个奇怪的问题
首先,我创建一个小项目来尝试将字典写入 plist
我声明了一个文本字段和一个按钮,这是关于 IBAction 的代码:
NSArray *localPathsTemp = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *localDocPathTemp = [localPathsTemp objectAtIndex:0];
NSString *localFilePathTemp = [localDocPathTemp stringByAppendingPathComponent:@"InputPassword.plist"];
NSMutableDictionary *localDictreadTemp = [[NSMutableDictionary alloc] initWithContentsOfFile:localFilePathTemp];
NSMutableDictionary *localSerialNumber = [NSMutableDictionary dictionaryWithObject:setSN.text
forKey:@"input_serial_number"];
我尝试记录我在其中写入的内容
NSLog(@"Local Dictionary : %@",[localDictreadTemp valueForKey:@"input_serial_number"]);//"input_serial_number=1"
NSLog(@"Dictionary-localSerialNumber is %@",[localSerialNumber valueForKey:@"input_serial_number"]);//1(I enter 1 at textfield)
正如我所想,这很好
但我将这整个移动到我的项目中
我得到了 NULL
这是我原始项目中的代码(在aalertview)
NSArray *localPathsTemp = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *localDocPathTemp = [localPathsTemp objectAtIndex:0];
NSString *localFilePathTemp = [localDocPathTemp stringByAppendingPathComponent:@"InputPassword.plist"];
NSMutableDictionary *localDictreadTemp = [[NSMutableDictionary alloc] initWithContentsOfFile:localFilePathTemp];
NSMutableDictionary *localSerialNumber = [NSMutableDictionary dictionaryWithObject:setLocalSerialNumber.text
forKey:@"input_serial_number"];
[localDictreadTemp addEntriesFromDictionary:localSerialNumber];
[localDictreadTemp writeToFile:localFilePathTemp atomically:YES];
NSLog(@"Text in the textfield:%@",setLocalSerialNumber.text);
NSLog(@"Local Dictionary %@",localSerialNumber);//"input_serial_number" = 1
NSLog(@"Dictionary-LocalDictreadTemp %@",[localDictreadTemp valueForKey:@"input_serial_number"]);//NULL
最后的结果是 NULL
这是我无法弄清楚的问题,我在示例中得到了一个值,但在这里不起作用。
为什么...我给出了错误的文件路径或...?
感谢您的所有回复
有关我的项目的更多信息
我的应用程序用于控制硬件设备
如果用户是第一次使用应用程序
用户必须输入密码和设备序列号
该设备正在使用bonjour搜索设备
并从URL中获取默认的序列号/密码(本例是在WIFI中)
例如,URL 是 http://11.33.44.65/defaultsn_pwd.php
我将得到一个 plist 文件,如下所示:
{
sn = 1;
pwd = 777;
}
这是用户无法看到的信息。
应用程序将弹出一个带有两个文本字段的alertView
如果文本字段中的文本与 sn/pwd 形式 URL 匹配
它将写入。
但是!!!如果用户在3G环境下,它会连接到我的服务器来控制设备
这与Wifi有很大不同,因为你必须给服务器一个设备序列号
所以
输入序列号(我需要在iphone上的plist中写入,但这里得到NULL)
-
将序列作为新 URL 的一部分,例如http://server/defaultsn_pwd.php
?sn= 1
因为我无法在 plist 中写入序列号,因此无法获得正确的 URL
我的网址将像这样 http://server/defaultsn_pwd.php
?sn=NULL
它会使我的程序崩溃
这是一个非常致命的问题,请帮助我解决这个问题......
我陷入这个问题太久了......
Hey All,I got a weird problem here
First I create a small project to try write dictionary to plist
I declared a textfield and a button and this is code about IBAction:
NSArray *localPathsTemp = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *localDocPathTemp = [localPathsTemp objectAtIndex:0];
NSString *localFilePathTemp = [localDocPathTemp stringByAppendingPathComponent:@"InputPassword.plist"];
NSMutableDictionary *localDictreadTemp = [[NSMutableDictionary alloc] initWithContentsOfFile:localFilePathTemp];
NSMutableDictionary *localSerialNumber = [NSMutableDictionary dictionaryWithObject:setSN.text
forKey:@"input_serial_number"];
I try to log what I write in
NSLog(@"Local Dictionary : %@",[localDictreadTemp valueForKey:@"input_serial_number"]);//"input_serial_number=1"
NSLog(@"Dictionary-localSerialNumber is %@",[localSerialNumber valueForKey:@"input_serial_number"]);//1(I enter 1 at textfield)
It's woks fine as I think
But I move this whole to my project
I got a NULL
This is the code in my original project(in a alertview)
NSArray *localPathsTemp = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *localDocPathTemp = [localPathsTemp objectAtIndex:0];
NSString *localFilePathTemp = [localDocPathTemp stringByAppendingPathComponent:@"InputPassword.plist"];
NSMutableDictionary *localDictreadTemp = [[NSMutableDictionary alloc] initWithContentsOfFile:localFilePathTemp];
NSMutableDictionary *localSerialNumber = [NSMutableDictionary dictionaryWithObject:setLocalSerialNumber.text
forKey:@"input_serial_number"];
[localDictreadTemp addEntriesFromDictionary:localSerialNumber];
[localDictreadTemp writeToFile:localFilePathTemp atomically:YES];
NSLog(@"Text in the textfield:%@",setLocalSerialNumber.text);
NSLog(@"Local Dictionary %@",localSerialNumber);//"input_serial_number" = 1
NSLog(@"Dictionary-LocalDictreadTemp %@",[localDictreadTemp valueForKey:@"input_serial_number"]);//NULL
Last result is NULL
That's the problem I can't figure out,I got a value at sample ,but not work here .
Why...did I give a wrong file path or ... ?
Thanks for all replys
More information about my project
My application is use to control a hardware device
If the user is first time to use application
User have to enter the password and device serial number
The device is use bonjour to search the device
And get a default serial number/password from URL(this case is in WIFI)
ex.the URL is http://11.33.44.65/defaultsn_pwd.php
I will get a plist file like :
{
sn = 1;
pwd = 777;
}
This is the information user can't see it.
And the application will pop up an alertView with two textfields
If the text in the textfield is match the sn/pwd form URL
It will write in.
But !!!if user is in the 3G environment , It will connect to my server to control the device
This is very different with Wifi,because you have to give server a device serial number
So
-
Enter the serial number(I need to write in plist on iphone,But got NULL here)
-
Take the serial as a part of a new URL ex.http://server/defaultsn_pwd.php
?sn=1
Because I can't write serial number in plist ,so I can't get a right URL
My URL will like this http://server/defaultsn_pwd.php
?sn=NULL
It will crash my program
This is avery deadly issues ,Please help me to figure this problem out....
I trapped in this problem too long...
发布评论
评论(1)
我敢打赌这是问题所在。除非您将文件写入代码中其他位置的该位置,否则
localFilePathTemp
处没有文件。由于该文件是空的,您的 initWithContentsOfFile 返回一个 nil 字典,其余的就是 nil 对象的连锁反应。试试这个:
I betcha this is the problem line. Unless you are writing a file to that location elsewhere in code, there is no file at
localFilePathTemp
. Since that file is empty, yourinitWithContentsOfFile
returns anil
dictionary, and the rest is a chain reaction of nil objects.try this: