indexPath.row-1 - 4294967295 - PullRequest
       2

indexPath.row-1 - 4294967295

0 голосов
/ 12 сентября 2011

У меня есть indexPath.row, равный 1, и логи 1 (при использовании NSLog). Если я вызываю indexPath.row-1 (должен вернуть 0), он возвращает 4294967295.

Я пытаюсь вернуть objectAtIndex:indexPath.row-1, но вот тогда я получаю 4294967295.

Есть идеи?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    // Configure the cell...
    Singleton *singleton = [Singleton sharedSingleton];
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    if ([[prefs objectForKey:@"isYes"]boolValue] == 1 && randomMarker != 100)
    {
        //sets cell image
        UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,98,100)];
        imgView.image = [UIImage imageNamed:@"stackoverflow.png"];
        cell.imageView.image = imgView.image;

        //sets cell text
        cell.textLabel.text = @"Text";
        self.checkedInCount == 100;
    }
    else if ([[prefs objectForKey:@"isYes"]boolValue] == 1 && randomMarker == 100)
    {
        //gets cell and cleans up cell text
        NSLog(@"%@", indexPath.row);
        NSString *title = [[[singleton linkedList]objectAtIndex:(indexPath.row-1)]objectForKey:@"desc"];

Ответы [ 2 ]

10 голосов
/ 12 сентября 2011

Когда вы пытаетесь присвоить неподписанному целому (NSUInteger) отрицательное значение, оно часто возвращает очень большое положительное значение.

Вы звоните

NSString *tempDesc = [[[singleton linkedList]objectAtIndex:indexPath.row-1]objectForKey:@"desc"]; 

когда indexPath.row имеет значение 0, поэтому перевод:

NSString *tempDesc = [[[singleton linkedList]objectAtIndex:-1]objectForKey:@"desc"]; 

Поскольку objectAtIndex: принимает целое число без знака в качестве параметра, -1 преобразуется в значение мусора 4294967295.

Чтобы избежать этой проблемы, не вычитайте 1 из 0, проверив сначала, что indexPath.row положительно.


Вот еще одна проблема:

NSLog(@"%@", indexPath.row);

Вместо этого следует читать:

NSLog(@"%u", indexPath.row);
0 голосов
/ 14 июня 2012
NSLog(@"%@", indexPath.row);

Вы должны использовать% d для целого числа, так как indexPath.row вернет целое число

Использование NSLog (@ "% d", indexPath.row);

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