小编Dai*_*jan的帖子

Objective C keypath从iTunes中获取所有艺术家

我正在使用键值编码来获取iTunes中的所有艺术家:

[self.iTunes valueForKeyPath:@"sources.@distinctUnionOfArrays.playlists.@distinctUnionOfArrays.tracks.artist"];
Run Code Online (Sandbox Code Playgroud)

现在,这很好用.这非常有效.我也想对专辑做同样的事情.

[self.iTunes valueForKeyPath:@"sources.@distinctUnionOfArrays.playlists.@distinctUnionOfArrays.tracks.album"];
Run Code Online (Sandbox Code Playgroud)

这里的问题是,有多个相同名称的专辑,但不一定是同一个艺术家.有没有办法获得每张专辑的歌曲,所以我可以找出它是什么艺术家,并获得它的封面?我知道有NSPredicate,但这很慢.

具体代码并不重要,我只需要键值编码部分.

谢谢!

enumeration objective-c key-value-coding nspredicate

9
推荐指数
1
解决办法
667
查看次数

在swift中显示UIAlertView时出错

我试图在我的快速应用程序中显示UIAlertView

    alert = UIAlertView(title: "",
        message: "bla",
        delegate: self,
        cancelButtonTitle: "OK")
    alert!.show()
Run Code Online (Sandbox Code Playgroud)

=> BAD_ACESS错误: - [_ UIAlertViewAlertControllerShim initWithTitle:message:delegate:cancelButtonTitle:otherButtonTitles:]()

所以我怀疑自己.我把它设置为零

    alert = UIAlertView(title: "",
        message: "bla",
        delegate: nil,
        cancelButtonTitle: "OK")
    alert!.show()
Run Code Online (Sandbox Code Playgroud)

=> ARM_DA_ALIGN错误: - [_ UIAlertViewAlertControllerShim initWithTitle:message:delegate:cancelButtonTitle:otherButtonTitles:]()


完整的代码

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, UIAlertViewDelegate {

    @lazy var window = UIWindow(frame: UIScreen.mainScreen().bounds)
    @lazy var locationManager = CLLocationManager()
    var alert: UIAlertView? = nil

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
        //setup dummy window
        self.window.backgroundColor = UIColor.whiteColor()
        self.window.rootViewController = UIViewController() …
Run Code Online (Sandbox Code Playgroud)

uialertview swift uialertcontroller

9
推荐指数
2
解决办法
1万
查看次数

使用Obj-C重命名现有文件

我已经看过几次这个问题,但到目前为止我还没有能够使用任何后期解决方案取得成功.我想要做的是重命名应用程序的本地存储中的文件(也是Obj-c的新类型).我能够检索旧路径并创建新路径,但为了实际更改文件名,我必须编写什么?

我到目前为止:

- (void) setPDFName:(NSString*)name{
    NSArray *dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                   NSUserDomainMask, YES);
    NSString* initPath = [NSString stringWithFormat:@"%@/%@",[dirPaths objectAtIndex:0], @"newPDF.pdf"];
    NSString *newPath = [[NSString stringWithFormat:@"%@/%@",
                          [initPath stringByDeletingLastPathComponent], name]
                         stringByAppendingPathExtension:[initPath pathExtension]];
}
Run Code Online (Sandbox Code Playgroud)

objective-c

7
推荐指数
2
解决办法
8165
查看次数

使用CADisplayLink'结合'与CAMediaTimingFunction动画UIView.(获得任意曲线)

我正在使用a CADisplayLink来做一个只插入一个值并重绘视图本身的视图动画.

例如,我有一个视图MyView,它有一个属性value,每当设置值时我调用setNeedsDisplay,视图知道要绘制什么.

动画这个我使用CADisplayLink,我希望视图在值之间"变形".我只是通过插入动画的开始和停止值来实现这一点:

- (CGFloat)interpolatedValue:(CGFloat)sourceValue withValue:(CGFloat)targetValue forProgress:(CGFloat)progress;

现在获得一个线性进展很容易并得到一个"特定曲线"(好)但我希望能够利用CAMediaTimingFunction这个(或其他一些预先存在的逻辑 - 我不想重新发明轮子':)

core-animation uiview ios

7
推荐指数
1
解决办法
812
查看次数

如何找出用户第一次购买应用程序/安装它时(可能没有UDID?)

我想知道用户何时第一次购买我的应用...到目前为止,我还没有找到一个干净的方式,UDID似乎是唯一的选择.

理想情况下,我可以通过StoreKit获得收据,但到目前为止.. nada

我错过了什么吗?有人有想法吗?


情况是我有订阅和FIRST问题(从您购买应用程序时应该是免费的).如果我以后重新安装..我应该总是得到原始问题)

示例:我在10.2010购买应用程序我安装并运行它并从10.2010免费获得订阅问题(没有应用程序内购买)现在我删除了我安装它的应用程序1.2013我只能从10.2010免费获得订阅!不是新的

subscriptions storekit ios

6
推荐指数
1
解决办法
2452
查看次数

无法识别的选择器发送到实例0x8c9a6d0

谁能告诉我这个错误代码中发生了什么

[UIViewController collectionView:numberOfItemsInSection:]: unrecognized selector sent to instance 0x8c9a6d0

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIViewController collectionView:numberOfItemsInSection:]: unrecognized selector sent to instance 0x8c9a6d0'
Run Code Online (Sandbox Code Playgroud)

collectionView代码是

-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {     
    return [array count];
}
Run Code Online (Sandbox Code Playgroud)

我做错了什么

objective-c ios

6
推荐指数
2
解决办法
6019
查看次数

用户点击UILocalNotification:它可以将数据传递给应用程序吗?

我正在创建一个本地UILocalNotification并将其作为横幅显示给用户.是否可以进行设置,以便当用户点击它并返回应用程序时,应用程序将收到某种特定类型的通知数据?我想在应用程序中打开一个特定的视图控制器.我认为最好的方法是基本上向应用程序发送一个URL,或者是否有办法访问,UILocalNotification以便我可以测试哪种类型并采取正确的行动?

iphone ios uilocalnotification

5
推荐指数
2
解决办法
2994
查看次数

诠释?到CLBeaconMajorValue

我今天开始使用apple swift(和许多其他人一样;))并且我在阅读plist时很费劲.

我从我的info.plist中读取了一个plist条目,这是一个NSArray,其中每个条目都是一个Dictionary.

let regionsToMonitor = NSBundle.mainBundle().infoDictionary["Regions"] as Array<Dictionary<String,AnyObject>>

for regionToMonitor in regionsToMonitor {
    ...
Run Code Online (Sandbox Code Playgroud)

每个地区的一个关键是一个专业.用objC术语表示NSNumber.我把它读作:

let major: Int? = regionToMonitor["major"] ? regionToMonitor["major"]!.integerValue : nil;
Run Code Online (Sandbox Code Playgroud)

现在我需要它作为CLBeaconMajorValue

所以我试着把它投到那个 as

                clRegion = CLBeaconRegion(proximityUUID: uuid,
                    major: major! as CLBeaconMajorValue,
                    identifier: identifier)
Run Code Online (Sandbox Code Playgroud)

不起作用.UUID和标识符可以工作(我已经检查过另一个构造函数,但不是init

这也不好

                let m = major! as CLBeaconMajorValue
Run Code Online (Sandbox Code Playgroud)

如何转换我的NSNumber/int?到CLBeaconMajorValue

ios swift

5
推荐指数
1
解决办法
1728
查看次数

Swift 中的线程间通信?

我的目标是使用 Swift 解析大型 XML 文件 (20 GB)。NSXMLParser 和与 Swift 对象的桥接存在一些性能问题,因此我正在考虑多线程。具体有以下划分:

  1. 主线程-解析数据
  2. 工作线程 - 将 ObjC 类型转换为 Swift 类型并发送到 1。将 ObjC NSDictionary 转换为 [String: String] 是最大的瓶颈。这也是分离到多线程的主要原因。
  3. 工作线程 - 将 XML 解析为 ObjC 类型 - 并发送到 2. NSXMLParser 是一个推送解析器,一旦开始解析,就无法暂停它。

应按顺序解析数据,因此应保持输入顺序。我的想法是在 1 和 2 上运行 NSRunLoop,允许并行处理而不会阻塞。根据Apple的文档,线程之间的通信可以通过调用来实现performSelector:onThread:withObject:waitUntilDone:。然而这个符号在 Swift 中不可用。

我认为 GCD 不适合作为解决方案。两个工作线程都应该是长时间运行的进程,新工作以随机间隔进入。

如何使用 Swift 实现上述目标(例如,多线程上的 NSRunLoops)?

multithreading nsrunloop swift

5
推荐指数
1
解决办法
953
查看次数

从笔尖名称创建NSWindow

我正在尝试从自己的nib文件创建一个NSWindow,但它似乎比我预期的更难...

NSWindowController提供了init(windowNibName: String?)一种可以被子类覆盖的方法.似乎不可能在init(windowNibName: String?)不覆盖它的情况下调用基类(编译器显示错误消息,即没有采用该String参数的初始化程序).

但是当重写此init(...)方法时,您必须遵循初始化链,这会强制您调用指定的初始化程序.这个指定的初始化程序是init(window: NSWindow!).

这就是我现在被困住的地方......似乎我必须创建一个NSWindow对象(不知何故)才能将它传递给指定的初始化程序.但我不知道如何从nib文件创建NSWindow.

有人有任何线索吗?

cocoa swift

3
推荐指数
2
解决办法
4147
查看次数