Iphone SDK: ошибка или логическая ошибка, просмотр таблицы не может прокрутиться вниз? - PullRequest
0 голосов
/ 06 сентября 2010

это произошло с перебоями

Проверьте мой код и сравните результат печати

возможно, кто-то может знать, что не так с моим кодом ...

1.Я загружаю данные из списка URL-адресов

    - (void)viewDidLoad {

    NSURLRequest *theRequest=[NSURLRequestrequestWithURL:[NSURLURLWithString:@"http://www.envolab.com/envotouch/ios_status_req_test.php"]
                                 cachePolicy:NSURLRequestUseProtocolCachePolicy
                                 timeoutInterval:60.0];

    NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
    NSData *returnData = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:nil error:nil]; 
    NSString *listFile = [[NSString alloc] initWithData:returnData encoding:NSASCIIStringEncoding];   
    plist = [listFile propertyList];
}

чем я распечатаю результат, чтобы проверить правильность данных или нет

адрес правильный, я вижу plist-файл в Safari или IE

2. есть результат:

plist is :::::> 
(
        {
        category = Light;
        nodeID = 1;
        nodeName = "Living Room";
        nodeStatus = 0;
        nodeTrigger = 0;
        nodeType = "light_sw";
    },
        {
        category = Light;
        nodeID = 2;
        nodeName = Kitchen;
        nodeStatus = 0;
        nodeTrigger = 0;
        nodeType = "light_sw";
    },
        {
        category = Light;
        nodeID = 3;
        nodeName = Bedroom;
        nodeStatus = 1;
        nodeTrigger = 0;
        nodeType = "light_sw";
    }
)

ОК, этот результат соответствует файлу plist, который я создаю

Я хочу отобразить некоторые элементы в табличном представлении

3. Далее я определяю, сколько строк мне нужно

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [plist count];
}

General, вернется 3

4. чем я устанавливаю данные, которые я читаю с URL, и устанавливаю в свои ячейки tableView

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"LightCell";

    LightCell0 *cell =(LightCell0 *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[LightCell0 alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
    }


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

        //Get "nodeNAme"
        if(indexPath.row == i){
           cell.lightLocation.text =  [[[plist objectAtIndex:i] valueForKey: @"nodeName"]description];  
        //Determine each row's pic is Light On/Off from "nodeStatus"
        if ([[[plist objectAtIndex:i] valueForKey: @"nodeStatus"] intValue] == 0){
                cell.lightImageView.image = [UIImage imageNamed:@"lightOff.png"]; 
        }

        else if([[[plist objectAtIndex:i] valueForKey: @"nodeStatus"] intValue] == 1){
                cell.lightImageView.image = [UIImage imageNamed:@"lightOn.png"];
                cell.lightSwitch.on=YES;
        }   

        }
    }
    return cell;
}

Build & Run -> Успешно без предупреждения

Я также получил результат, как мне кажется, изображение соответствует состоянию переключателя

Если для nodeStatus задано значение 0 = выключен свет

иначе это будет свет на

и количество строк 3

BUTTTTTTTTTTTTT !!!!!

Когда я прокручиваю вид вниз, он вылетает без какого-либо сообщения

иногда этого не произойдет, например, когда вы наверху таблицы

вы пытаетесь "прокрутить вверх", он автоматически прокручивает вид вниз

когда я пытаюсь прокрутить вниз, я думаю, что он вернется автоматически

но это не так!?!

Я печатаю строку, которую я создаю, она отображается так

Now you see me tableView Row Count
TOTAL PLIST ROW COUNT IS  = 3
Now you see me Load Data 0
Now you see me Load Data 1
Now you see me Load Data 2

выглядит хорошо, но я замечаю одну необычную вещь

каждый раз, когда я прокручиваю вниз, случайно появится еще одна строка

Now you see me Load Data 0
Now you see me Load Data 1
Now you see me Load Data 2
Now you see me Load Data 0,1,2(<-This line appear randomly with the number)

В режиме консоли вы видите только «Отладка прервана»

Но иногда появляется сообщение об ошибке:

  -[__NSCFTimer count]: unrecognized selector sent to instance 0xbb00af0
    2010-09-07 00:45:04.168 EnvoTouchDemo[3803:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 
'-[__NSCFTimer count]: unrecognized selector sent to instance 0xbb00af0'
    terminate called after throwing an instance of 'NSException'

Я удаляю программу в симуляторе и перестраиваю снова, она выглядит отлично

но запустить через несколько раз, снова сбой ... и с разумом ???

Я думаю, что моя логика верна .... но крушение действительно раздражает меня ...

спасибо, что прочитал мои проблемы

надеюсь, что кто-то может решить эту проблему!

1 Ответ

0 голосов
/ 06 сентября 2010

Вы забыли сохранить свою plist переменную экземпляра.

Если это сохраняемое свойство, вы можете использовать:

self.plist = [listFile propertyList];

Если это просто переменная экземпляра, вы должны использовать:

plist = [[listFile propertyList] retain];

Это, вероятно, исправит ваши ошибки.

Также обратите внимание, что theConnection не выпускается. Таким образом, вы теряете память каждый раз при загрузке этого представления.

...