2010-08-24 45 views
101

Tôi đang cố gắng trích xuất một chuỗi (có chứa một số nguyên) từ một mảng và sau đó sử dụng nó như một int trong một hàm. Tôi đang cố gắng chuyển nó sang int bằng cách sử dụng intValue.ObjectiveC Parse Integer từ chuỗi

Đây là mã tôi đang cố gắng.

NSArray *_returnedArguments = [serverOutput componentsSeparatedByString:@":"]; 
    [_appDelegate loggedIn:usernameField.text:passwordField.text:(int)[[_returnedArguments objectAtIndex:2] intValue]]; 

tôi nhận được lỗi này:

passing argument 3 of 'loggedIn:::' makes pointer from integer without a cast

Có chuyện gì vậy?

+2

Làm thế nào LOGGEDIN ::: được khai báo? đặc biệt là loại tham số thứ 3 mà nó mong đợi? – Vladimir

+2

Vì tò mò, bạn đến từ ngôn ngữ nào? Tôi đã nhìn thấy một phát ban của những người yêu cầu các câu hỏi Objective-C trên SO, nơi họ đã thực hiện các cuộc gọi phương thức trông giống như phương thức 'loggedIn :::' của bạn, đó là một cách không có mục tiêu-C để làm việc. – kubi

+0

@kubi: đó là Obj-C, phương pháp có đối số không có tên. – beefon

Trả lời

241

Tôi thực sự không biết điều gì là khó khăn như vậy về câu hỏi này, nhưng tôi cố gắng làm điều đó theo cách này:

[myStringContainingInt intValue];

Cần lưu ý rằng bạn cũng có thể làm:

myStringContainingInt.intValue;

+2

Chỉ cần cho chúng ta noobs ra khỏi các ngôn ngữ khác, '[myStringContainingInt intValue];' cũng có thể được viết như 'myStringContainingInt.intValue;' – ToddBFisher

+5

Điều gì xảy ra khi số bên trong 'myStringContainingInt' quá lớn để vừa với bên trong 32 bit-- thực sự 31 bit kể từ khi nó được ký? –

+0

Bạn nên sử dụng longValue trong trường hợp này – dulgan

0

Về cơ bản, tham số thứ ba trong loggedIn không phải là số nguyên, nó phải là một đối tượng của một số loại, nhưng chúng ta không thể biết chắc chắn bởi vì bạn không nêu rõ tên tham số trong lời gọi phương thức. Cung cấp chữ ký phương thức để chúng tôi có thể thấy chắc chắn. Có lẽ phải mất NSNumber hoặc một cái gì đó.

+1

Nó không nhất thiết phải là một đối tượng. Anh ta có thể đã nhầm lẫn khai báo phương thức khi dùng 'int *' - thực tế, điều đó dường như khá có thể với tôi, vì rất nhiều người viết Objective-C mà không học những điều cơ bản của C giả định rằng các kiểu tham số chỉ bao gồm các ngôi sao như một phần cú pháp của họ. – Chuck

+0

Yeah, đã không nghĩ về điều đó. Đó là một khả năng tốt. –

+0

Mất int *. Điều này không chính xác? –

1
NSArray *_returnedArguments = [serverOutput componentsSeparatedByString:@":"]; 

_returnedArguments là một mảng của NSStringsUITextField text bất động sản đang kỳ vọng. Không cần phải chuyển đổi.

Cú pháp lỗi:

[_appDelegate loggedIn:usernameField.text:passwordField.text:(int)[[_returnedArguments objectAtIndex:2] intValue]]; 

Nếu _appDelegate của bạn có một tài sản passwordField, sau đó bạn có thể thiết lập các văn bản bằng cách sử dụng sau đây

[[_appDelegate passwordField] setText:[_returnedArguments objectAtIndex:2]]; 
+0

Tôi nghĩ rằng bạn đã bị loại bỏ hoàn toàn bởi tên phương thức kỳ lạ và lời kêu gọi lúng túng. Thuộc tính không phải là "mong đợi một chuỗi" (điều đó có nghĩa là gì) - 'passwordField.text' là đối số thứ hai của phương thức' loggedIn ::: 'và' [[_returnedArguments objectAtIndex: 2] intValue] 'là đối số thứ ba. Không có gì được truyền cho một tài sản. – Chuck

+0

tôi khai báo tên phương thức là lỗi .. suy ra mã đang cố gắng làm gì ... – falconcreek

-1

Nếu tôi hiểu bạn một cách chính xác, bạn cần phải chuyển đổi NSString của bạn đến int? Hãy thử hòa bình mã này:

NSString *stringWithNumberInside = [_returnedArguments objectAtIndex:2]; 
int number; 
sscanf([stringWithNumberInside UTF8String], "%x", &flags); 
+4

NSString có phương thức 'intValue'. http://developer.apple.com/iphone/library/documentation/cocoa/reference/foundation/Classes/NSString_Class/Reference/NSString.html#//apple_ref/occ/instm/NSString/intValue – Chuck

+0

Xin lỗi, bạn nói đúng. – beefon

7

bạn chỉ có thể chuyển đổi các chuỗi như thế [str intValue] hoặc [str integerValue]

integerValue Trả về giá trị NSInteger của văn bản của người nhận.

  • (NSInteger) integerValue Return Value Các NSInteger giá trị của văn bản của người nhận, giả định một đại diện thập phân và bỏ qua khoảng trắng ở phần đầu của chuỗi. Trả về 0 nếu người nhận không bắt đầu bằng một biểu diễn văn bản thập phân hợp lệ của một số.

để biết thêm thông tin tham khảo here

+3

Bạn trả lời câu hỏi này sau khi có nhiều câu trả lời cho cùng một điều đã có ở đây? –

+5

Bạn đang đùa tôi à? Nếu chuỗi là "0" thì sao? Đó có phải là lỗi hoặc phân tích cú pháp chính xác không? Rất buồn vì Apple không có ngoại lệ vì đây chính xác là nơi bạn cần đến. – phreakhead