我正在深入研究iOS开发,我仍然熟悉NSString对象.我正处于需要计算字符串中非字母数字字符数的位置.我想出的一种方法是从字符串中剥离非字母数字字符,然后从原始字符串的长度中减去剥离字符串的长度,就像这样......
NSCharacterSet *nonalphanumericchars = [[NSCharacterSet alphanumericCharacterSet ] invertedSet];
NSString *trimmedString = [originalString stringByTrimmingCharactersInSet:nonalphanumericchars];
NSInteger numberOfNonAlphanumericChars = [originalString length] - [trimmedString length];
Run Code Online (Sandbox Code Playgroud)
但它不起作用.计数始终为零.如何计算NSString对象中的非字母数字字符数?
非常感谢你的智慧!
如何将一个NSString复制到另一个?
@interface MyData : NSObject
{
@private
//user's private info
NSInteger uID;
NSString *name;
NSString *surname;
NSString *email;
NSString *telephone;
//user's picture
UIImage *image;
}
@property (nonatomic, assign) int uID;
@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSString *surname;
@property (nonatomic, retain) NSString *email;
@property (nonatomic, retain) NSString *telephone;
@property (nonatomic, retain) UIImage *image;
@end
Run Code Online (Sandbox Code Playgroud)
我有两个这种类型的对象.MyData*obj1,obj2;
首先是初始化.其次我想先用初始化.
obj2 = [obj1 copy]; //crashes
newData.surname = data.surname; //crashes to
newData.email = data.email;
newData.telephone = data.telephone;
Run Code Online (Sandbox Code Playgroud)
我知道第二个对象的副本没有保留!请帮忙!感谢名单!
我有一个int currentFontSize,我想与存储在C数组中的NSString进行比较,这里是代码.
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
static NSString* fontSizeName[] =
{
@"14",
@"18",
@"22",
@"26",
@"30",
@"34",
};
int fontSizeSegmentID;
int currentFontSize = 22;
NSString *val = [NSString stringWithFormat: @"%i", currentFontSize];
NSString *val2 = @"22";
NSLog(@"the current font size is %i", currentFontSize);
NSLog(@"the current font Value1 is %i", val);
NSLog(@"the current font Value2 is %i",val2);
int i;
for (i = 0; i < 6; i++) {
NSLog(@"fontSizeNAme:%d",fontSizeName[i]);
NSLog(@"val:%d",val); …Run Code Online (Sandbox Code Playgroud) 我正在创建一个应用程序,我必须将数据从远程数据库存储到本地sqlite3数据库.
问题是 - 当要插入的任何字符串包含unicode字符,例如:\ U00a0或\ U2022或\ U2019时,它会崩溃.
崩溃的代码部分是 -
NSString *insertQuery = @"insert into XYZ(field1,field2) values (@"1",[recordDict objectForKey:@"field2"]);
// recordDict contains value: @"\U00a0 \U00a0 \U00a0 \U00a0The Cadfsdfsdfptain\U2019s" for key: @"field2"
sqlite3_stmt *insertStmnt;
const char *sql = [insertQuery cStringUsingEncoding:1];
printf("insertQuery - %s",sql); // it is showing insertQuery - (null) and crashing at next line
if(sqlite3_prepare_v2(database, sql, -1, &insertStmnt, NULL) != SQLITE_OK){
NSLog(@"Error while creating insert statement. '%s'",sqlite3_errmsg(database));
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议我如何解决这个问题?
谢谢,
Miraaj
我有一个与Keychain交互的程序.你在一个指针传递给一个空指针和钥匙扣引导它,我想,到了密码,也传递一个UInt32的指针,它会指向密码的长度.
然后我需要将它用作NSString,我试图直接将其转换为它,但它聚合了更多的位然后需要,这对密码不起作用.我试着用:
NSString* password=[NSString stringWithCharacters:passwordData length:passwordLength];
Run Code Online (Sandbox Code Playgroud)
这将密码更改为中文字符.不知道为什么.当我在调试模式下打印描述时,它给了我:
Printing description of password:
\u3039\u4839\u6d6f\u2165\u1566?
Run Code Online (Sandbox Code Playgroud)
我能够完美地使用它:
NSString* password=[NSString stringWithCString:passwordData length:passwordLength];
Run Code Online (Sandbox Code Playgroud)
但这是折旧的,我想避免使用它.我对C和Objective-C都很新,而且无效指针会引发我的循环.在调试模式下,我查看了指针指向的内存,它肯定在该内存位置.我尝试使用const char*,但它不喜欢说变量可能没有被初始化.
这是我用来获取钥匙串的方法
- (OSStatus) GetPasswordKeychain:(void*)passwordData length:(UInt32*)passwordLength label:(NSString*)serverName
{
status=SecKeychainFindGenericPassword(NULL, (UInt32)[serverName length], [serverName UTF8String], usernameLength, username,passwordLength , passwordData, NULL);
return status;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法让NSString以适当的长度指向那里,让它成为正确的东西.谢谢您的帮助.这个地方很棒!
如果有像"com.mycompany.purchase1"这样的NSString如何只获得purchase1.
NSString *mainString = @"com.mycompany.purchase1";
-(NSString*)getLastComponent : (NSString*) mainString
{
NSString *string;
//Implementation
return string;//It should return only "purchase1"
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用lastPathComponent,pathExtension,我也不能使用substringToIndex,因为字符串可能有不同的长度.
这个函数的一个非常奇怪的行为,
void* getNSString(const NSString* str){
str = @"This is new test";
//NSString* str1 = @"so strange test";
return;
}
Run Code Online (Sandbox Code Playgroud)
然后
NSLog(@"%@",getNSString(@"test"));
Run Code Online (Sandbox Code Playgroud)
结果将是
This is new test
Run Code Online (Sandbox Code Playgroud)
如果取消注释
NSString* str1 = @"so strange test";
Run Code Online (Sandbox Code Playgroud)
我的理解是没有返回任何内容,所以应该为NULL,为什么打印出那些字符串?
然后结果将是
so strange test
Run Code Online (Sandbox Code Playgroud) 如何将整数转换为目标c中的字符串,以及字符串的每个字符是如何到达的?
相当于java charAt()方法.
我有2个视图共享相同的类文件(.h和.m).在第一个视图中,我有一个UIPicker,其中包含一个项目列表和一个按钮.如果用户单击该按钮,我希望我的第二个视图提供相应的图片(基于在UIPicker中选择的项目).
我的想法是根据所选项目在第一个视图中设置NSString.然后,当用户单击按钮将第二个视图推送到屏幕上时,我可以使用新视图传递该字符串.我一直在"谷歌搜索"一段时间,但我似乎无法用手指环绕它.如果重要,我正在使用导航控制器.这是在按钮单击上执行的代码:
-(IBAction) viewPictures{
ViewControllerClass *sView = [[ViewControllerClass alloc] initWithNibName:@"ViewController2XIB" bundle:nil];
[self.navigationController pushViewController:sView animated:YES];
}
Run Code Online (Sandbox Code Playgroud) 我有一个NSMtringArray的NSString对象.我如何创建一个NSString,它由该数组中的所有元素组成,中间用分号连接在一起?
例如:
array = "hello","hi","bye",nil;
output = "hello;hi;bye";
Run Code Online (Sandbox Code Playgroud)