Need help with a UITextField method *help*

Discussion in 'iOS Programming' started by iJustinCabral, Aug 20, 2012.

  1. macrumors member

    iJustinCabral

    Joined:
    Jul 8, 2012
    #1
    What I'm trying to do is make it so after they press done on the pop up keyboard, if the text is nil...no object is added to the array, but if its not nil then create the object and add it to the array.

    Heres the code I have

    Code:
     - (BOOL)textFieldShouldReturn:(UITextField *)textField
    {
        
        if (!self.theList)
        {
            self.theList = [[NSMutableArray alloc] init];
        }
        
        Paper *newItem = [[Paper alloc]init];
        
        newItem.listName = textField.text;
    
    if (newItem.listName == nil)
    {
        [textField resignFirstResponder];
        [self.collectionView reloadData];
    }    
       
    else { 
            [self.theList addObject:newItem];
        
            textField.text = nil;
            
            NSLog(@"Count %d",self.theList.count);
            
            [textField resignFirstResponder];
       
            [self.collectionVIew reloadData];
        
    }
        return YES;
    }
    
     
  2. macrumors member

    Joined:
    Mar 27, 2012
    #2
    What's wrong with the code you already have? In order for anyone to help you with something, you have to tell us what's not working.
     
  3. macrumors 604

    ArtOfWarfare

    Joined:
    Nov 26, 2007
    #3
    Why would the text ever be nill?

    You should check if the string equals @"" (an empty string.) Actually, there might even be an NSString method to directly test if it's an empty string...
     
  4. thread starter macrumors member

    iJustinCabral

    Joined:
    Jul 8, 2012
    #4
    I fixed the problem.


    I just made an NSString = @"" and then compared my list object to the string and if it was equal then it wasn't added to the array
     
  5. macrumors 68030

    MattInOz

    Joined:
    Jan 19, 2006
    Location:
    Sydney
    #5
    You could also test the the Length of the string.

    Code:
    if (textView.text.length !=0)
    {
    //Do Stuff
    }
    
     
  6. macrumors 6502a

    Duncan C

    Joined:
    Jan 21, 2008
    Location:
    Northern Virginia
    #6
    Testing the length is MUCH more efficient than string comparison. String comparison is fairly compute-intensive.
     
  7. macrumors 603

    Joined:
    Aug 9, 2009
    #7
    I would be truly astounded if the string-comparison method doesn't test for length equality before comparing character-sequences.
     
  8. thread starter macrumors member

    iJustinCabral

    Joined:
    Jul 8, 2012
    #8
    ahhh I see. I'll change it up to do that, thanks a bunch.
     
  9. macrumors 604

    ArtOfWarfare

    Joined:
    Nov 26, 2007
    #9
    How is length determined? I was under the impression that NSStrings weren't much different from C-strings, which would then mean length is determined by checking each character and seeing if it's a \0 or not... If it's going character by character either way, I don't see why length would be any faster?
     
  10. macrumors 68030

    MattInOz

    Joined:
    Jan 19, 2006
    Location:
    Sydney
    #10
    From the Doc's for NSString
    As a primative method it seem like it needs to fast and cheap.
    Also it seems that all NSObjects maintain an Instance size in Bytes* it would seem like the length of the string in characters would be simple function of the size.

    Not to mention that to comparing two strings you need two objects where as length is standalone.

    *fun reading
    MacDevCentre -inside Objective-c runtime
     
  11. macrumors 603

    Joined:
    Aug 9, 2009
    #11
    A simple test to check this:
    1. Create a string of 10 million characters.
    2. Create a 2nd string that's the same 10 million characters plus an 'X'.
    3. Create a 3rd string that's the same 10 million characters plus a 'Y'.
    3. Perform isEqual: across the three strings.

    If the length-first hypothesis is correct, it should be noticeably faster when the lengths differ, and noticeably slower when the lengths are the same. Any sufficiently large value would work, 10 million is just an example.
     
  12. macrumors 6502a

    Duncan C

    Joined:
    Jan 21, 2008
    Location:
    Northern Virginia
    #12
    It seems to me that relying on the optimizations of a class's isEqual method is silly when there is a very clean way to test for an empty string.

    The code:

    Code:
    if ([field.text length] == 0)
    
    uses one of the primitive methods of the class directly to test that the string is empty. ANY other call you do (like isEqual or isEqualToString) at a minimum will have to call the length methods on both the field's text and the blank string you are passing in. If it is a naive implementation, it could be much, much worse.

    Finally, checking that the length == 0 is really easy to read and maintain.
     

Share This Page