Как обрабатывать значения с плавающей точкой в ​​листе - PullRequest
4 голосов
/ 14 апреля 2010

Я читаю в plist с веб-сервера, созданного с помощью некоторых php. Когда я читаю это в NSArray в своем приложении для iphone, а затем выплевываю NSArray с NSLog, чтобы проверить это, я вижу, что значения с плавающей точкой обрабатываются как строки. Я хотел бы, чтобы значения «расстояния» рассматривались как числовые, а не как строки. Этот список отображается в табличном представлении, где его можно отсортировать по расстоянию, но проблема в том, что расстояние отсортировано в виде строки, поэтому я получаю несколько забавных результатов сортировки.

Могу ли я преобразовать значения расстояния с плавающей точкой из строки в NSArray? Или, может быть, есть более простое решение, такое как настройка определения plist, или, может быть, что-то в коде NSMutableURLRequest?

Мой список выглядит следующим образом:

<?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>name</key>
    <string>Pizza Joint</string>
    <key>distance</key>
    <string>2.1</string>
  </dict>
  <dict>
    <key>name</key>
    <string>Burger Kang</string>
    <key>distance</key>
    <string>5</string>
  </dict>
</array>
</plist>

После чтения его в NSArray, он выглядит следующим образом для NSLog:

    result: (
      {
        distance = "2.1";
        name = "Pizza Joint";
      },
        {
        distance = 5;
        name = "Burger Kang";
      }
    )

Вот код Objective C, который извлекает список:

// Set up url request
// postData and postLength are left out, but I can post in this question if needed.
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:@"http://mysite.com/get_plist.php"]];  
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];     


NSError *error;
NSURLResponse *response;
NSData *result = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSString *string = [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding];
// libraryContent is an NSArray
self.libraryContent = [string propertyList];
NSLog(@"result: %@", self.libraryContent);

Ответы [ 3 ]

10 голосов
/ 14 апреля 2010

Вы можете использовать тип ключа real в своих файлах 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">
<dict>
        <key>value</key>
        <real>1</real>
</dict>
</plist>
3 голосов
/ 20 апреля 2010

В этой таблице перечислены возможные типы, которые вы можете использовать в списке:

Таблица 2-1: Типы списков свойств и их различные представления

1 голос
/ 14 апреля 2010

Используйте элемент <real>, а не <string>.

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