Ios 按顺序获取plist数据

Ios 按顺序获取plist数据,ios,objective-c,xcode,plist,Ios,Objective C,Xcode,Plist,我将数据保存在plist中。一旦我的应用被删除并重新安装,我计划通过iCloud获取这些plist数据。我有上传选项,可以将文件发送到云,并在安装新应用时检索。删除/重新安装应用程序后,将检索到plist数据,不会出现任何问题。现在的问题是,我将这样的文件保存在数组中,然后写入plist: Printing description of arrTemp: <__NSCFArray 0x175f7d90>( { Amount = "USD 100.00"; Catego

我将数据保存在plist中。一旦我的应用被删除并重新安装,我计划通过iCloud获取这些plist数据。我有上传选项,可以将文件发送到云,并在安装新应用时检索。删除/重新安装应用程序后,将检索到plist数据,不会出现任何问题。现在的问题是,我将这样的文件保存在数组中,然后写入plist:

Printing description of arrTemp:
<__NSCFArray 0x175f7d90>(
{
    Amount = "USD 100.00";
    Category = "";
    Currency = USD;
    Date = "Fri 31 Oct,2014";
    DateSort = "2014/10/31";
    Merchant = "";
    Payment = "";
    Purpose = "-";
    SubCategory = "";
    TimeStamp = "Fri 31 Oct,2014 13:35:07";
    Tips = "0.00";
    UDDate1 = "Fri 31 Oct,2014";
    UDDate2 = "Fri 31 Oct,2014";
    UDNumber1 = "0.00";
    UDNumber2 = "0.00";
    UDNumber3 = "0.00";
    UDText1 = "-";
    UDText2 = "-";
    UDText3 = "-";
    Uploaded = upload;
    Value = 0;
}
)
ARRTTEMP的打印说明: ( { 金额=“100.00美元”; 类别=”; 货币=美元; 日期=“2014年10月31日星期五”; DateSort=“2014/10/31”; 商户=”; 付款=”; 目的=“-”; 子类别=”; TimeStamp=“2014年10月31日星期五13:35:07”; Tips=“0.00”; UDDate1=“2014年10月31日星期五”; UDDate2=“2014年10月31日星期五”; UDNumber1=“0.00”; UDNumber2=“0.00”; UDNumber3=“0.00”; UDText1=“-”; UDText2=“-”; UDText3=“-”; 上传=上传; 数值=0; } ) 当我从iCloud检索时,plist如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
    <dict>
        <key>Amount</key>
        <string>USD 100.00</string>
        <key>Category</key>
        <string></string>
        <key>Currency</key>
        <string>USD</string>
        <key>Date</key>
        <string>Thu 31 Oct,2014</string>
        <key>DateSort</key>
        <string>2014/10/31</string>
        <key>Merchant</key>
        <string></string>
        <key>Payment</key>
        <string></string>
        <key>Purpose</key>
        <string>-</string>
        <key>SubCategory</key>
        <string></string>
        <key>TimeStamp</key>
        <string>Fri 31 Oct,2014 13:35:07</string>
        <key>Tips</key>
        <string>0.00</string>
        <key>UDDate1</key>
        <string>Fri 31 Oct,2014</string>
        <key>UDDate2</key>
        <string>Fri 31 Oct,2014</string>
        <key>UDNumber1</key>
        <string>0.00</string>
        <key>UDNumber2</key>
        <string>0.00</string>
        <key>UDNumber3</key>
        <string>0.00</string>
        <key>UDText1</key>
        <string>-</string>
        <key>UDText2</key>
        <string>-</string>
        <key>UDText3</key>
        <string>-</string>
        <key>Uploaded</key>
        <string>upload</string>
        <key>Value</key>
        <string>0</string>
    </dict>
</array>
</plist>

数量
100.00美元
类别
通货
美元
日期
2014年10月31日星期四
日期排序
2014/10/31
商人
付款
目的
-
子类别
时间戳
2014年10月31日星期五13:35:07
提示
0
UDDate1
2014年10月31日星期五
UDDate2
2014年10月31日星期五
UDNumber1
0
UDNumber2
0
UDNumber3
0
UDText1
-
UDText2
-
UDText3
-
上传
上传
价值
0

当新安装应用程序时,我无法将从云检索的数据直接写入我的plist。我必须将plist数据返回到喜欢的数组(最初发布为“打印arrTemp的说明:”),并在我的应用程序安装新的时将其写入我的路径。如何将数据从plist转换成新的数组应该像我最初在“打印arrTemp的描述:”中发布的那样??请帮助

您的plist是一个包含单个元素的数组,它是一个字典。字典是无序的集合。数组已排序,并保留该顺序

此外,您似乎对用于记录数组的格式(这是对数组调用
-description
的结果)和plist的格式感到困惑
NSArray
NSDictionary
使用旧格式描述自己,但这与保存或序列化属性列表时它们实际存储在磁盘或数据流中的方式无关。不要比较这两种形式,并期望它们是相同的


问题是您只是将plist作为数据检索,而不知道如何将其反序列化到
NSArray
对象

NSData* data = /* data object containing the plist XML as you posted in your question */;
NSError* error;
NSArray* array = [NSPropertyListSerialization propertyListWithData:data
                                                           options:NSPropertyListImmutable
                                                            format:NULL
                                                             error:&error];
if (!array)
{
    NSLog(@"failed to deserialize plist data %@: %@", data, error);
    // additional error handling
}
if (![array isKindOfClass:[NSArray class]])
{
    NSLog(@"plist data is not an array as expected; data %@; got %@", data, array);
    // additional handling for invalid data
}

步骤1:将NSObject类名创建为PList

in.h

步骤2:在视图控制器中

   In viewDidLoad Method

     arrTemp = [PList arrayPlistInit:PUBLIC]; //I think PUBLIC is the plist name.
步骤3:从数组中获取值

  In viewDidLoad Method after arrTemp

   for(int i=0;i<[arrTemp count];i++)

   {

     NSString *strAmount = [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0]valueForKey:@"Amount"]];

     NSString *strCategory = [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0] valueForKey:@"Category"]];

     NSString *strCurrency = [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0]valueForKey:@"Currency"]];

     NSString *strDate= [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0] valueForKey:@"Date"]];

     NSString *strDateSort = [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0] valueForKey:@"DateSort"]];

     NSString *strMerchant = [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0]valueForKey:@"Merchant"]]; 

     NSString *strPayment = [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0] valueForKey:@"Payment"]];

     NSString *strPurpose = [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0] valueForKey:@"Purpose"]];

     NSString *strSubCategory = [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0] valueForKey:@"SubCategory"]];

     NSString *strTimeStamp= [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0]valueForKey:@"TimeStamp"]];

     NSString *strTips = [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0] valueForKey:@"Tips"]];

     NSString *strUDDate1 = [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0] valueForKey:@"UDDate1"]]; 

     NSString *strUDDate2 = [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0] valueForKey:@"UDDate2"]];

     NSString *strUDNumber1 = [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0]valueForKey:@"UDNumber1"]]; 

     NSString *strUDNumber2 = [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0] valueForKey:@"UDNumber2"]];

     NSString *strUDNumber3 = [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0] valueForKey:@"UDNumber3"]]; 

     NSString *strUDText1 = [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0] valueForKey:@"UDText1"]]; 

     NSString *strUDText2 = [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0] valueForKey:@"UDText2"]]; 

     NSString *strUDText3 = [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0] valueForKey:@"UDText3"]]; 

     NSString *strUploaded = [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0] valueForKey:@"Uploaded"]]; 

     NSString *strValue = [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0] valueForKey:@"Value"]];

  }
ARRTTEMP后viewDidLoad方法中的


对于(int i=0;itry,这对您有帮助吗?NSDictionary*dictRoot;NSLog(@“DIC is%@”,dictRoot));显示空值。Ramanan只需遵循我的代码。这将帮助您解决问题了吗?是否有任何可能的方法将此plist数据转换为数组,如我在“打印arrTemp的说明:”中发布的那样?这是一个数组。您发布了一个包含单个元素的数组,这是一个词汇表,两次都是。这两种表示都显示了相同的数据结构。如果您认为它们不同,您会感到困惑。NSData fileData=documentData;//从iCloud接收的文件**现在我将//NSData转换为str**NSString myString;myString=[[NSString alloc]initWithData:fileData encoding:NSASCIIStringEncoding];**当NSLog这个“myString”显示正确时。但问题发生在这里NSMutableArray*arrayPlist=[NSMutableArrayWithContentsOfFile:myString];NSLog->arrayPlist显示空。有问题的第二个代码开始K。您是否创建了Plist(新文件->IOS资源->属性列表)对于那些设置键?我现在会清楚地告诉你。如果你在Plist中设置了键,你可以简单地使用我上面的代码。那是在Bundle中。这就是为什么我们必须提到[[NSBundle mainBundle]pathForResource:plistName of type:@“Plist”]的原因。然后我们可以从Plist到数组获取这些值。
   In viewDidLoad Method

     arrTemp = [PList arrayPlistInit:PUBLIC]; //I think PUBLIC is the plist name.
  In viewDidLoad Method after arrTemp

   for(int i=0;i<[arrTemp count];i++)

   {

     NSString *strAmount = [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0]valueForKey:@"Amount"]];

     NSString *strCategory = [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0] valueForKey:@"Category"]];

     NSString *strCurrency = [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0]valueForKey:@"Currency"]];

     NSString *strDate= [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0] valueForKey:@"Date"]];

     NSString *strDateSort = [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0] valueForKey:@"DateSort"]];

     NSString *strMerchant = [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0]valueForKey:@"Merchant"]]; 

     NSString *strPayment = [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0] valueForKey:@"Payment"]];

     NSString *strPurpose = [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0] valueForKey:@"Purpose"]];

     NSString *strSubCategory = [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0] valueForKey:@"SubCategory"]];

     NSString *strTimeStamp= [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0]valueForKey:@"TimeStamp"]];

     NSString *strTips = [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0] valueForKey:@"Tips"]];

     NSString *strUDDate1 = [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0] valueForKey:@"UDDate1"]]; 

     NSString *strUDDate2 = [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0] valueForKey:@"UDDate2"]];

     NSString *strUDNumber1 = [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0]valueForKey:@"UDNumber1"]]; 

     NSString *strUDNumber2 = [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0] valueForKey:@"UDNumber2"]];

     NSString *strUDNumber3 = [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0] valueForKey:@"UDNumber3"]]; 

     NSString *strUDText1 = [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0] valueForKey:@"UDText1"]]; 

     NSString *strUDText2 = [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0] valueForKey:@"UDText2"]]; 

     NSString *strUDText3 = [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0] valueForKey:@"UDText3"]]; 

     NSString *strUploaded = [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0] valueForKey:@"Uploaded"]]; 

     NSString *strValue = [NSString stringWithFormat:@"%@",[[arrTemp objectAtIndex:0] valueForKey:@"Value"]];

  }