在Python中,我可以像这样容易得到一个子阵列
>> v1 = ['a', 'b', 'c', 'd']
>> v2 = v1[1:]
>> v2
['b', 'c', 'd']
Run Code Online (Sandbox Code Playgroud)
如何优雅地在Objective-C中完成相同的操作?
起初我虽然这种方法可以完成这项工作:
- (void)getObjects:(id[])aBuffer range:(NSRange)aRange
Run Code Online (Sandbox Code Playgroud)
但它将对象复制到缓冲区位置.我需要将它们添加回另一个实例NSArray.另外,编译器抱怨保留/释放属性,我真的不太愿意处理.
id* objs;
NSRange rng = NSMakeRange(1, [v1 count] - 1);
[v1 getObjects:objs range:rng]; # Sending '__strong id *'
# to parameter of type '__unsafe_unretained id *'
# changes retain/release properties of pointer
Run Code Online (Sandbox Code Playgroud)
那么,还有更优雅的方式吗?或者除了迭代之外别无他法objectEnumerator?
我在 Xcode for iOS 中使用 PayPal sdk
我设法成功地使用它。现在,我从服务器收到以下响应:
代码:
self.resultText = completedPayment.confirmation
println(self.resultText)
Run Code Online (Sandbox Code Playgroud)
结果:
[response: {
"create_time" = "2015-07-13T17:52:31Z";
id = "PAY-NONETWORKPAYIDEXAMPLE123";
intent = sale;
state = approved;
},
client: {
environment = mock;
"paypal_sdk_version" = "2.11.1";
platform = iOS;
"product_name" = "PayPal iOS SDK";
},
response_type: payment]
Run Code Online (Sandbox Code Playgroud)
我的问题是,我只想将所有数据结果解析并访问到 NSDictionary 和/或 NSArray
对于NSArray,Objective-C 允许我们指定要存储在数组中的值的类型。例如,我可以声明一个 的数组,NSString如下所示:
NSArray<NSString*> *arrayOfStrings;
Run Code Online (Sandbox Code Playgroud)
虽然编译器和运行时环境不一定强制执行,但这样的指示对于可读性和稍微简单的代码语法来说都很方便。
我想知道是否存在这样的语法NSDictionary。例如,要指定字典中的值类型,是否存在类似以下内容:
NSDictionary<UIImage*> *imageMappings;
Run Code Online (Sandbox Code Playgroud)
其中字典的值被指定为类型UIImage。
附加问题:
可以指定密钥类型吗NSDictionary?
如果可能,如何在没有键类型的情况下指定值类型?
是否有其他常见的数据结构Foundation具有这种通用参数化?
在我的应用程序中,我们使用Realm Storage在本地存储值。我可以将数组值存储为字符串。但不能将值存储和检索为数组。是否可以将NSArray值存储到Realm对象并将其检索为NSArray。这是我用来存储字符串值的代码:
class PracticeView: Object
{
dynamic var PracticeArray = ""
}
Run Code Online (Sandbox Code Playgroud)
和用法:
let realm:Realm = try! Realm()
let PracticeDetails = PracticeView()
PracticeDetails.PracticeArray = "Test String Values"
try! realm.write
{
realm.add(PracticeDetails)
}
print("Values In Realm Object: \(PracticeDetails.PracticeArray)")
//Result Will Be
Values In Realm Object: Test String Values
Run Code Online (Sandbox Code Playgroud) 我有 tableview,我需要在其中显示几个部分。你应该把这张表想象成你的歌曲的播放列表。在顶部的第一部分中,我需要显示一个带有按钮的单元格,它将向播放列表添加更多歌曲,tableview 的其他部分是音乐类别的标题(如流行、摇滚等)。这些部分中的每一个都包含作为歌曲名称的单元格。
我的歌曲叫一个这样的数组:var songsGroups = [SongGroup]。这实际上是我的数据源。
SongGroup 包含几个属性:
var categoryName: String
var songs: [Songs]
Run Code Online (Sandbox Code Playgroud)
但问题出现在下一个层面。我每次都需要检查 indexPath.section 并这样做:
if indexPath.section == 0 {
// this is a section for ADD NEW SONG BUTTON cell no need in header title as there is no data repression only static text on the cell.
} else {
var musicCategoryName = songsGroups[indexPath.seciton - 1]. categoryName
headerTitle.title = musicCategoryName
}
Run Code Online (Sandbox Code Playgroud)
正如你看到的,通过添加这个很酷的-1神奇数字,我的代码变得神奇了。我重播根本不喜欢。
作为一个肯定的想法,我可以尝试将我的 ADD NEW SONG BUTTON 部分(通过添加一些额外的对象)与songsGroups数组结合起来,并为此目的创建 NSArray。就像你记得的那样在 Objective-C …
当我尝试在模拟器(3.1.3,Xcode 3.1.4)上启动我的应用程序时,它显示我objc_msgSend并且应用程序无法启动.这只发生在我分配NSMUtable数组时 这是我的代码部分,在viewDidLoad中,
-(void)viewDidLoad{
locationArray = [[NSMutableArray alloc] initWithObjects:@"new delhi", @"faridabad",@"meerut"];
str1=[locationArray objectAtIndex:0];
str2=[locationArray objectAtIndex:1];
[super viewDidLoad];
}
Run Code Online (Sandbox Code Playgroud)
然后我想在以下方法中使用locationArray对象;
-(CLLocationCoordinate2D) addressLocation1{
double latitude = 0.0;
double longitude = 0.0;
NSString *str= [locationArray NSString *str= [locationArray objectAtIndex:0];
//NSString *str= @"new delhi"
NSString *urlString = [NSString stringWithFormat:@"http://maps.google.com/maps/geo?q=%@&output=csv",
[str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSString *locationString = [NSString stringWithContentsOfURL:[NSURL URLWithString:urlString]];
NSArray *listItems = [locationString componentsSeparatedByString:@","];
if([listItems count] >= 4 && [[listItems objectAtIndex:0] isEqualToString:@"200"]) {
latitude = [[listItems objectAtIndex:2] doubleValue];
longitude = [[listItems objectAtIndex:3] doubleValue];
}
else …Run Code Online (Sandbox Code Playgroud) 我有一个带有搜索栏的tableview.我想搜索我的整个核心数据库.
我在这里将所有内容加载到数组中:
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Entity" inManagedObjectContext:managedObjectContext];
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
[request setEntity:entityDescription];
NSError *error = nil;
NSArray *array = [managedObjectContext executeFetchRequest:request error:&error];
self.myArray = array;
Run Code Online (Sandbox Code Playgroud)
我正在使用此方法搜索,但收到错误:
- (void) searchTableView {
NSString *searchText = searchBar.text;
NSMutableArray *searchArray = [[NSMutableArray alloc] init];
for (NSDictionary *dictionary in myArray)
{
NSString *value = [dictionary objectForKey:@"name"];
[searchArray addObject:value];
}
for (NSString *sTemp in searchArray)
{
NSRange titleResultsRange = [sTemp rangeOfString:searchText options:NSCaseInsensitiveSearch];
if (titleResultsRange.length > 0)
[copyListOfItems addObject:sTemp];
}
[searchArray release]; …Run Code Online (Sandbox Code Playgroud) 将数组中前三个对象(或者数组有多大的1或2个)转换成逗号分隔的字符串的最有效方法是什么.我觉得有一种方法可以解决这个问题,但我无法解决这个问题
对象是Bands,存储在bandArray中,每个band的属性包括bandName.
所以输出就像是
String
"Abba" <- when there is one object
"Abba, Kiss" <- when there is two objects
"Abba, Kiss, Nirvana" <- when there is three objects
"Abba, Kiss, Nirvana" <- when there is four objects. after three, names are ignored
Run Code Online (Sandbox Code Playgroud) 我有一个XML解析器,它将XML文件中的所有信息(作为项目资源附加)解析为集合.我第一次通过NSMutableArray完成它,然后我将其转换为NSMutableDictionary,一切正常.在那之后,我意识到没有必要拥有NSMutableArray; 我只需要将XML直接解析为NSMutableDictionary.我做了它(它只是一个属性和我向对象添加一个对象的方式),但问题是我现在泄漏了.非常奇怪的泄漏.它可能发生而且不可能发生.每次它发生时都会说它有关于散列和键/值问题的东西.部分代码:
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
self.currentElement = elementName;
// category
if(self.targetBranch==XML_KEY_CATEGORY && [elementName isEqualToString:XML_KEY_CATEGORY]) {
self.categoryItem = [[CategoryItem alloc] initWithId:[attributeDict objectForKey:@"id"] andParentId:[attributeDict objectForKey:@"parentId"]];
//NSLog(@"didStartElement with id %@",self.categoryItem.categoryId);
}
...
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
...
// categories
if (self.targetBranch==XML_KEY_CATEGORY && [self.currentElement isEqualToString:XML_KEY_CATEGORY]) {
//NSLog(@"adding category to array");
if (self.categoryItem.categoryName)
self.categoryItem.categoryName = [NSString stringWithFormat:@"%@%@",self.categoryItem.categoryName,string]; //[string copy];
else
self.categoryItem.categoryName = string; //[string copy];
...
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString …Run Code Online (Sandbox Code Playgroud) 我有很多不同NSArrays,根据用户的选择我希望其中一个被复制到一个新的NSArray.如何将一个复制NSArray到另一个?
nsarray ×10
objective-c ×7
ios ×5
iphone ×4
nsdictionary ×3
swift ×2
arrays ×1
cocoa ×1
cocoa-touch ×1
generics ×1
json ×1
memory-leaks ×1
nsstring ×1
realm ×1
rlmarray ×1
swift3 ×1
uisearchbar ×1
uitableview ×1
xcode ×1