【问题标题】:How to fetch data from pList in Label如何从Label中的pList中获取数据
【发布时间】:2012-12-19 11:01:38
【问题描述】:

我有一个 RegistrationController 屏幕来存储 email-id ,password,DOB,Height,WeightlogininController 屏幕来匹配 email-idpassword 登录目的.

现在,在某些 third 屏幕中,我必须仅从登录用户的 plist 中获取 Height,Weight 以将其显示在标签上。现在如果我存储 email-id 的值和password in from LoginViewController in string 并在新屏幕中调用它以匹配如果匹配然后给出Height,Weight ..如果它更正则如何从plist中获取Height,Weight同一个。

如何从存储的 plist 中获取字符串?

这是我的代码:

-(NSArray*)readFromPlist
 {
   NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
  NSUserDomainMask, YES); 
  NSString *documentsDirectory = [documentPaths objectAtIndex:0];
 NSString *documentPlistPath = [documentsDirectory stringByAppendingPathComponent:@"XYZ.plist"];

   NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:documentPlistPath];

   NSArray *valueArray = [dict objectForKey:@"title"];

   return valueArray;

 }



- (void)authenticateCredentials {
    NSMutableArray *plistArray = [NSMutableArray arrayWithArray:[self readFromPlist]];

    for (int i = 0; i< [plistArray count]; i++)
    {
        id object = [plistArray objectAtIndex:i];

        if ([object isKindOfClass:[NSDictionary class]]) {
            NSDictionary *objDict = (NSDictionary *)object;

            if ([[objDict objectForKey:@"pass"] isEqualToString:emailTextFeild.text] && [[objDict objectForKey:@"title"] isEqualToString:passwordTextFeild.text])
            {
                NSLog(@"Correct credentials");
                return;
            }
            NSLog(@"INCorrect credentials");
        } else {
             NSLog(@"Error! Not a dictionary");
        }
    }
}

【问题讨论】:

    标签: iphone ios ios5 plist


    【解决方案1】:

    首先从您的 plist 文件中获取整个值,然后将此 NSArray 存储到 NSMutableArray 并使用其 objectAtIndexvalueForKey 属性获取值..请参阅下面的整个示例..

    更新:

    NSString* plistPath = [[NSBundle mainBundle] pathForResource:@"yourFileName" ofType:@"plist"];
    NSArray *contentArray = [NSArray arrayWithContentsOfFile:plistPath];
    NSMutableArray *yourArray = [[NSMutableArray alloc] initWithArray:contentArray];
    
        for (int i = 0; i< [yourArray count]; i++)
        {
            id object = [yourArray objectAtIndex:i];
    
            if ([object isKindOfClass:[NSDictionary class]]) {
                NSDictionary *objDict = (NSDictionary *)object;
    
               yourLableWeight.text = [[objDict objectForKey:@"Weight"];// set index with your requirement
             yourLableHeight.text = [[objDict objectForKey:@"Height"];
    
        }
    

    希望对您有所帮助...

    【讨论】:

    • 在 Logincontroller 中的何处使用此代码或在我需要获取数据的 thirdview 中使用此代码
    • 好吧,就像你说的存储在 NSMutableArray 中,但是 plist 如何知道它来自同一个登录用户 ....因为 plist 中有多个登录用户
    • 看到老兄,当您当时登录时,您获得了一些唯一的用户 ID,并从中获取同样在用户 ID 下的 plist .. 为此,您必须创建良好的设计来使用它每次使用...
    • 是的,我已经到了从第三页检查用户 ID 的步骤……它工作正常……现在什么时候获取体重和高度它崩溃了……
    • 嘿,你不会相信的......刚才......我也这么想,并在我的代码中尝试过......并且工作正常......我打算回复你......和你回答同一个..
    【解决方案2】:

    当您在登录屏幕上输入凭据以检查凭据何时与获取的 plist 匹配时,然后将该 plist 传递给下一个控制器。做这样的事情

    UserViewController *controller = [[UserViewController alloc] initWithNibName:@"UserViewController" bundel:nil];
    [controller setUserDictionary:yourPlistDictionary];
    [self.navigationController pushViewController:controller animated:YES];
    [controller release];
    

    在 UserViewController 中你会有一个 NSDictionary 实例来存储要显示的数据,希望对你有所帮助

    【讨论】:

    • 不,它会将我推到 UserViewController ...我不想推...。我想当我在 UserViewController 中时,我想检查登录用户并获取特定的用户高度和重量
    • 你的问题是你在 LoginViewController 你需要匹配凭据然后在第三个屏幕上你需要显示用户的高度和宽度正确,如果你为每个用户管理单独的 plist 那么为什么不'您在匹配用户名和密码后保存该 plist 并将该 plist 发送到包含用户所有数据的第三个视图控制器
    猜你喜欢
    • 1970-01-01
    • 2012-04-06
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    • 2013-03-04
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    相关资源
    最近更新 更多